cod*_*ter 4 linux shell bash ssh
我正在尝试运行一些命令ssh,但对以下行为感到困惑sh -c:
ssh myhost sh -c 'echo starting; who -b; date; echo $SHELL'
Run Code Online (Sandbox Code Playgroud)
输出(注意:echo 的输出只是一个空行!)
system boot 2016-12-22 20:22
Thu Jan 26 06:12:52 UTC 2017
/bin/bash
Run Code Online (Sandbox Code Playgroud)
没有sh -c我得到正确的输出:
ssh myhost 'echo starting; who -b; date; echo $SHELL'
Run Code Online (Sandbox Code Playgroud)
输出:
starting
system boot 2016-12-22 20:22
Thu Jan 26 06:18:28 UTC 2017
/bin/bash
Run Code Online (Sandbox Code Playgroud)
问题:
sh -c处理echo starting命令?它输出一个空行。/bin/basheven with sh -c?小智 8
这里发生了一些不同的不直观的事情。
首先,您对远程主机的命令被解析为
(sh -c echo starting); who -b; date; echo $SHELL
Run Code Online (Sandbox Code Playgroud)
外部引号被剥离,只剩下echo startingrun insh这就是为什么$SHELL设置为/bin/bash.
其次,由于此答案中所述的原因,未打印“开始”:https : //unix.stackexchange.com/a/253424
但是,您可以通过简单地将命令包装在另一组引号中来解决这两个问题,从而为您留下
ssh myhost sh -c '"echo starting; who -b ; date; echo $SHELL"'
Run Code Online (Sandbox Code Playgroud)
尽管我认为如果您将单引号移出以包含sh命令会更清楚:
ssh myhost 'sh -c "echo starting; who -b ; date; echo $SHELL"'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
888 次 |
| 最近记录: |