将“at”命令传递给字符串命令而不是脚本的路径,同时使其立即运行

将“at”命令传递给字符串命令而不是脚本的路径,同时使其立即运行

使用该at命令我可以在将来运行一次脚本:

at now + 1 minutes -f ~/script.sh

或运行字符串命令现在然后返回未来的结果:

echo "xyz" >> ~/testtest.txt | at now + 1 minute

我怎样才能传递一个在未来而不是现在运行的字符串命令(如示例 2)(如示例 1)?例如

at now + 1 minutes -SOMEFLAG 'echo "xyz" >> ~/testtest.txt'

谢谢

答案1

使用此处文档传递脚本以便稍后在命令行上运行:

at now + 1 minute <<'END_AT'
echo 'xyz' >> ~/testtest.txt
END_AT

这里的文档被引用(通过使用<<'END_AT'而不是<<END_AT)来阻止当前 shell 扩展脚本文本中的变量等。该文档将at通过标准输入传递。

答案2

您可以单引号该命令并将其at按原样传递给:

echo 'echo "xyz" >> ~/testtest.txt' | at now + 1 minutes

或者,如果您使用的是 bash 或其他支持的脚本流程替代, 你可以做:

at now + 1 minutes < <(echo 'echo "xyz" >> ~/testtest.txt')

这基本上传递一个文件名,就像at传递一个带有命令的文件一样。

然而,使用heredoc作为库萨罗南达建议应该更便携,因为它不依赖于您的 shell 支持进程替换。

相关内容