bo *_*ang 1 bash subshell command-substitution
我使用的 Bash 命令:
$ ssh user@myserver.com ps -aux|grep -v \"grep\"|grep "/srv/adih/server/app.js"|awk '{print $2}'
6373
Run Code Online (Sandbox Code Playgroud)$ ssh user@myserver.com echo $(ps -aux|grep -v \"grep\"|grep "/srv/adih/server/app.js"|awk '{print $2}')
8630
Run Code Online (Sandbox Code Playgroud)第一个结果是正确的,第二个结果将改变我执行它的回显时间。但我不知道他们为什么不同。
我在做什么?
我的工作站的资源非常有限,因此我使用远程计算机来运行我的 Node.js 应用程序。ssh user@remotebox.com "cd /application && grunt serve"我在调试模式下运行它。当我命令Ctrl+时C,grunt 任务停止,但应用程序仍在调试模式下运行。我只想杀死它,我需要先获取PID。
命令替换由本地 shell 在运行之前执行ssh。
如果您的本地系统的名称是here,远程系统的名称是there,
ssh there uname -n
Run Code Online (Sandbox Code Playgroud)
将打印there而
ssh there echo $(uname -n) # should have proper quoting, too
Run Code Online (Sandbox Code Playgroud)
将uname -n在本地运行,然后发送扩展的命令行echo here来there执行。
另外,除非您特别要求 shell 在打印之前对输出执行通配符扩展和空白标记化,否则echo $(command)是无用的echocommand。
另外,grep x | awk { y }是无用的使用grep;它可以而且可能应该被重构为awk '/x/ { y }'——但是当然,在这里你正在重新发明pidof,所以最好只使用它。
ssh user@myserver.com pidof /srv/adih/server/app.js
Run Code Online (Sandbox Code Playgroud)
如果你想在本地捕获打印的 PID,语法是
pid=$(ssh user@myserver.com pidof /srv/adih/server/app.js)
Run Code Online (Sandbox Code Playgroud)
当然,如果你只需要杀死它,那就是
ssh user@myserver.com pkill /srv/adih/server/app.js
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11825 次 |
| 最近记录: |