我想将命令的结果作为下一个命令的参数的值传递。我知道有xargs
和管道|
,但它们并没有真正的帮助。
我想运行命令tail -f --pid=$REMOTE_PID logs
,其中REMOTE_PID是在远程服务器上运行的程序的PID。它在日志文件中写入1到30的数字,并且{ {1}}。因此,我想同时显示来自本地计算机上日志文件的数字。 所有这些都是在脚本中完成的,而不是手动进行的!
这是我到目前为止所做的,但无法获得正确的PID。在第一个命令中,我使用&释放外壳,以便可以运行下一个命令
sleep(1)
这些命令有效,但在混合正确的一个之前我得到了几个PID:
tail:无法打开“ 8087”进行读取:没有此类文件或目录
尾巴:无法打开“ 8109”进行读取:没有此类文件或目录
==>日志<==
1
2
3
...
我尝试了另一个代码:
ssh user@host 'nohup sh showdigits.sh' &
ssh user@host 'PID=`pgrep -f showdigits.sh` && tail --pid=$PID -f logs'
我收到此错误:
cat:pid:没有这样的文件或目录
尾巴::无效的PID
我想拥有脚本ssh user@host 'nohup sh showdigits.sh' &
ssh user@host "ps -ef | awk '/[s]howdigits.sh/{print $2}' > pid && tail --pid=`cat pid` -f logs"
的唯一一个PID,并将其传递给尾部。也许有一个更简单的解决方案?
谢谢
答案 0 :(得分:1)
您的策略是:
您可以通过完全删除第2步和第3步来简化此操作:
ssh user@host '
nohup sh showdigits.sh &
tail --pid=$! -f logs
'
(注意:使用sh
运行脚本是worst practice)
答案 1 :(得分:0)
您的grep匹配超过1个结果。第一个匹配项分配给--pid =,其他匹配项解释为文件名。
您必须先将其通过头部(或尾部),然后再进行处理(取决于您想要的pid)
PID=$(pgrep -f showdigits.sh | head -n1)