如何从终端运行命令,以便在没有 tty 的情况下执行该命令?

如何从终端运行命令,以便在没有 tty 的情况下执行该命令?

情况:我有一个 bash 脚本,旨在与 cron 一起运行。我在终端上测试了脚本,运行良好。当我将脚本配置为由 cron 执行时,脚本开始失败。

我花了很多功夫才发现脚本中的命令之一需要 TTY 才能运行,而 cron 的执行环境中没有提供这一功能。 (出于好奇:命令失败docker-compose并显示消息the input device is not a TTY

问题:我仍然想找到一种方法,在为 cron 配置 shell 脚本之前从终端测试它们。有没有办法从终端运行 shell 脚本,就像它是由 cron 运行一样?喜欢cron run_my_command_now 'echo 123'。或者可能只有一种方法可以从终端运行 shell 脚本,以便脚本认为没有终端?

答案1

IMO 最简单的方法可能是使用 ssh 和“-T”来禁用伪 TTY。

ssh -T localhost "command"

应该在没有 TTY 的情况下运行它。

答案2

请参阅 at(1) 手册页。

at -f /path/to/script_or_command now +5 min

或者类似的东西(EOT是Ctrl-D):

$ at 16:05
warning: commands will be executed using /bin/sh
at> source /my/environment/file
at> /path/to/script 
at> <EOT>
job 1 at Mon Feb 14 16:05:00 2022

相关内容