如何将bash中at命令的输出结果读取到变量中?
解决
at命令输出无法存入变量的问题 问题原因
at命令默认将状态信息(包括警告、任务编号)输出到标准错误(stderr),而bash的命令替换$(...)仅捕获标准输出(stdout),所以你之前的命令无法将at的输出存入变量。
解决方案
将at的stderr重定向到stdout,让命令替换可以捕获到内容:
myVar=$(echo "echo 'Hello World'" | at now + 1 minute 2>&1)
执行后,你可以通过echo "$myVar"查看变量内容,会包含原输出的警告和任务信息:
warning: commands will be executed using /bin/sh job 12 at Wed Mar 13 20:21:00 2024
可选优化:过滤警告信息
如果只需要任务编号和时间,不需要警告,可以用grep过滤掉警告行:
myVar=$(echo "echo 'Hello World'" | at now + 1 minute 2>&1 | grep -v "warning")
此时myVar仅保留job 12 at Wed Mar 13 20:21:00 2024。
内容的提问来源于stack exchange,提问作者Philipp
相关产品推荐
相关产品推荐

