GNU 屏幕 - 仅在程序具有 运行 后才执行另一个命令
GNU screen - execute another command only after program has run
我一直在寻找这个问题的答案,但一直找不到解决方案。我认为它比看起来更复杂!
我正在尝试使用 GNU screen 到 运行 远程服务器上的一个冗长程序(运行 几天),然后生成一个文本文件来表明它已完成只有在该程序完成 运行ning 之后。我尝试了以下命令:
screen -d -m <long program> && echo 'finished' >> finished.txt
必须立即分离屏幕,因为这将是使用 bash 中的 watch
命令的自动化过程。但不幸的是,一旦命令进入,上面的命令就会生成文本文件(我猜它正在计算 screen
的成功执行作为继续执行下一个命令的信号。我尝试了各种其他安排,包括
screen -d -m "<long program> && echo 'finished' >> finished.txt
但在这种情况下,它甚至似乎根本没有生成屏幕,也没有生成文本文件。另请注意,修改长程序以生成此文本文件似乎不是一个选项。
还有其他解决方法吗?任何帮助将不胜感激!
screen
只能将单个命令及其参数作为自己的最终参数。不幸的是,<long program> && echo 'finished' >> finished.txt
是一个 shell 命令,不能直接传递给 screen
。但是,您可以将其嵌入字符串中并将其作为单个参数传递给 shell 的 -c
选项:
screen -d -m sh -c '<long program> && echo "finished" >> finished.txt'
根据 <long program>
的确切含义,您可能需要非常小心任何引号的转义方式。
是一个很好的解决方案。
另一个可能更容易管理的解决方案是创建一个 shell 脚本,您可以通过 screen
调用它,而不是即时构建一个长长的 shell 命令.
例如,您可以创建一个名为 run-long-command
的脚本,它看起来像这样(不要忘记 chmod +x
它):
#!/bin/sh
if long-command ; then
echo Finished > finished.txt
else
echo Failed > finished.txt
fi
然后像这样提交给screen
:
screen -d -m ./run-long-command
请注意,该脚本比 shell 命令更漂亮;它报告 long-command
是通过还是失败。使用脚本还意味着您在脚本文件中记录了您所做的事情,而不仅仅是在您的 shell 命令历史记录中。
我一直在寻找这个问题的答案,但一直找不到解决方案。我认为它比看起来更复杂!
我正在尝试使用 GNU screen 到 运行 远程服务器上的一个冗长程序(运行 几天),然后生成一个文本文件来表明它已完成只有在该程序完成 运行ning 之后。我尝试了以下命令:
screen -d -m <long program> && echo 'finished' >> finished.txt
必须立即分离屏幕,因为这将是使用 bash 中的 watch
命令的自动化过程。但不幸的是,一旦命令进入,上面的命令就会生成文本文件(我猜它正在计算 screen
的成功执行作为继续执行下一个命令的信号。我尝试了各种其他安排,包括
screen -d -m "<long program> && echo 'finished' >> finished.txt
但在这种情况下,它甚至似乎根本没有生成屏幕,也没有生成文本文件。另请注意,修改长程序以生成此文本文件似乎不是一个选项。
还有其他解决方法吗?任何帮助将不胜感激!
screen
只能将单个命令及其参数作为自己的最终参数。不幸的是,<long program> && echo 'finished' >> finished.txt
是一个 shell 命令,不能直接传递给 screen
。但是,您可以将其嵌入字符串中并将其作为单个参数传递给 shell 的 -c
选项:
screen -d -m sh -c '<long program> && echo "finished" >> finished.txt'
根据 <long program>
的确切含义,您可能需要非常小心任何引号的转义方式。
另一个可能更容易管理的解决方案是创建一个 shell 脚本,您可以通过 screen
调用它,而不是即时构建一个长长的 shell 命令.
例如,您可以创建一个名为 run-long-command
的脚本,它看起来像这样(不要忘记 chmod +x
它):
#!/bin/sh
if long-command ; then
echo Finished > finished.txt
else
echo Failed > finished.txt
fi
然后像这样提交给screen
:
screen -d -m ./run-long-command
请注意,该脚本比 shell 命令更漂亮;它报告 long-command
是通过还是失败。使用脚本还意味着您在脚本文件中记录了您所做的事情,而不仅仅是在您的 shell 命令历史记录中。