2

我正在尝试在 Bash 脚本中捕获“at”命令的结果。捕获命令输出的各种方法似乎不起作用,但我不确定它是命令中的管道还是其他东西。

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

但是所有这些都让脚本挂起,看起来它正在等待一些输入。

什么是正确的方法来结束一个变量,如:

2014-04-03 12:00

==============================

编辑:

一种可能的复杂情况是 $cmd 带有标志:

ls -l

例如。

扩展的命令可能类似于:

echo ls -l | at noon tomorrow

解决方案:

v=$(echo $cmd | at $deployat 2>&1)
echo $v
4

1 回答 1

3

at将其输出打印到标准错误而不是标准输出。用于2>&1将标准错误传送at到标准输出。例子:

~$ 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

于 2014-04-02T23:18:21.707 回答