我试图捕获Bash脚本中的“at”命令的结果。 捕获命令输出的各种方法似乎不起作用,但我不确定它是命令中的pipe道还是别的东西。
echo $cmd | at $deployat
产生输出
job 42 at 2014-04-03 12:00
而且我正在努力争取时间。
不过,我期望的是类似的东西
v=$($cmd | at $deployat) echo $v
会工作,或
v=$(echo $cmd | at $deployat) echo $v
要么
v=`$cmd | at $deployat` echo $v
但是,所有这些都将剧本挂起,看起来像是在等待一些input。
什么是正确的方法来做到这一点,最终像一个variables:
2014-04-03 12:00
============================
一个可能的并发症是$ cmd带有标志:
ls -l
例如。
扩展的命令可能是这样的:
echo ls -l | at noon tomorrow
v=$(echo $cmd | at $deployat 2>&1) echo $v
at
打印输出到stderr不是标准输出。 使用2>&1
将at
的stderr输入到stdout。 例:
~$ out=$(echo cat Hello | at -v 2014-04-03 2>&1 | head -n 1) ~$ echo $out Thu Apr 3 01:21:00 2014
用-v
打印执行时间在head -n 1
的第一行。