ssh命令和引号

时间:2016-11-04 20:42:17

标签: linux ssh

执行String s1 = "Y"; do { System.out.println("Do you want to continue? Y/N"); s1 = scan.nextLine(); } while(s1=="Y"); 命令后跟远程命令和引号和没有引号的远程命令有什么区别?

E.g。有什么区别:

ssh

ssh remotehost tar xf archivename.tar

或者有什么区别:

ssh remotehost "tar xf archivename.tar"

ssh remotehost <path to script>/myscript.sh param

2 个答案:

答案 0 :(得分:2)

尾随参数组合成一个字符串,该字符串作为参数传递给远程计算机上登录shell的-c选项。在你的第一个例子中,没有什么区别。但是,请考虑以下事项:

$ ssh remotehost echo *

这里,*在本地扩展,结果传递给远程机器。在我的机器上,我的工作目录由一个包含撇号(单引号)的条目组成,因此远程主机尝试运行像

这样的命令
bash -c "echo chepner's folder"

当然导致错误。

$ ssh remotehost "echo *"

现在,远程主机获得文字*,但在传递给bash -c之前,它需要进行shell扩展。因此,您将输出远程主机上主目录中的所有文件。

$ ssh remotehost "echo \*"

最后,远程shell在其输入中获得引用的星号,因此您将获得单个文字*作为输出。

答案 1 :(得分:1)

引号可防止扩展特殊字符。

想象一下,如果你的命令中有任何你想要远程执行(;, &, &&, |, ||, >, >>等)。它们会在实际到达远程主机之前生效,因为bash不会知道所有这只是ssh的参数。

此外,如果您的脚本的路径包含更多空格,则它们会丢失,并且无法找到脚本。