linux - 如何将一个命令的输出作为下一个命令的参数值传递
问题描述
我想将命令的结果作为下一个命令的参数值传递。我知道有xargs
和管道|
,但那些并没有真正帮助。
我想运行tail -f --pid=$REMOTE_PID logs
REMOTE_PID 是远程服务器上运行的程序的 PID 的命令。它在日志文件中写入从 1 到 30 的数字,并且sleep(1)
. 所以我想同时显示来自本地机器上日志文件的数字。所有这些都是在脚本中完成的,而不是手动!
这是我到目前为止所做的,但无法获得正确的 PID。在第一个命令中,我放了 & 来释放 shell,这样我就可以运行下一个命令
ssh user@host 'nohup sh showdigits.sh' &
ssh user@host 'PID=`pgrep -f showdigits.sh` && tail --pid=$PID -f logs'
这些命令有效,但在获得正确的 PID 之前我得到了几个 PID:
尾部:无法打开“8087”进行阅读:没有这样的文件或目录
尾部:无法打开“8109”进行阅读:没有这样的文件或目录
==>日志<==
1
2
3
...
我尝试了另一个代码:
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"
我收到此错误:
cat: pid: No such file or directory
tail: : invalid PID
我想拥有脚本的唯一一个 PIDshowdigits.sh
并将其传递给尾部。也许有更简单的解决方案?
谢谢
解决方案
你的策略是:
- 启动一个进程
- 断开连接并忘记它
- 重新连接并尝试找到它
- 跟着它
您可以通过完全删除第 2 步和第 3 步来简化它:
ssh user@host '
nohup sh showdigits.sh &
tail --pid=$! -f logs
'
(注意:使用sh
运行脚本是最糟糕的做法)
推荐阅读
- html - 使用 document.delegate 时,子元素的 JQuery 事件处理程序在父元素之后触发
- apache-spark - 无法从 spark-sql 查询 Hive 表(德鲁伊存储)
- scala - 如何在scala中使用过滤器使用多重条件?
- java - 如何在 Java 中正确使用复制构造函数?
- swift - 单击选项卡栏时如何将表格视图发送到集合视图单元格的顶部?
- javascript - 如何使用匿名函数根据条件拆分数组
- oracle - PL/SQL 触发器在插入语句之前检查值
- java - 无法向 quarkus 项目添加扩展
- python - 将装饰器添加到动态生成的方法中
- graphics - 商业渲染器的标准照明模型