我已经看到了有关需要对远程ssh命令的参数进行两次转义的问题和解答。我的问题是:第二次解析究竟在何时何地完成?
如果我运行以下命令:
$ ssh otherhost pstree -a -p
我在输出中看到以下内容:
  |-sshd,3736
  |   `-sshd,1102
  |       `-sshd,1109
  |           `-pstree,1112 -a -p
远程命令(pstree)的父进程是sshd,似乎没有任何shell可以解析远程命令的命令行参数,因此似乎没有必要使用双引号或转义(但绝对是)。相反,如果我先在那儿ssh并获得一个登录shell,然后运行,pstree -a -p我会在输出中看到以下内容:
  ├─sshd,3736
  │   └─sshd,3733
  │       └─sshd,3735
  │           └─bash,3737
  │               └─pstree,4130 -a -p
很明显,bash在这种情况下,有一个外壳可以进行命令行解析。但是,在我直接使用远程命令的情况下,似乎没有外壳,那么为什么需要双引号?