一、ssh远程执行命令
ssh server "cd homework ; ls"
基本能完成常用的对于远程节点的管理了,几个注意的点:
- 如果不加双引号,第二个ls命令在本地执行
- 分号,两个命令之间用分号隔开
二、整条ssh命令用引号包围
a=1
ssh myserver echo $a # 正确
ssh myserver "echo $a" # 正确
ssh myserver 'echo $a' # 错误
双引号在本地进行解析,所以传过去命令不是echo $a
,而是echo 1
单引号在服务器进行解析,传过去的是`echo $a
,服务器不知道$a的值,解析为空
ssh myserver "for ((i = 0; i < 10; i ++ )) do echo $i; done" # 错误
ssh myserver 'for ((i = 0; i < 10; i ++ )) do echo $i; done' # 正确
双引号在本地进行解析,本地不知道$i
的值,解析为空
单引号在服务器进行解析,$i
的值在服务器随循环变化
三、shell命令变量中的空格问题(用ssh执行)
ssh ser mkdir homework/lesson_4/homework_4/\"$1\" # 正确
ssh ser mkdir homework/lesson_4/homework_4/"'$1'" # 正确
ssh ser mkdir homework/lesson_4/homework_4/'"$1"' # 错误
-
如果shell命令(用ssh执行)中有空格,变量用双引号引起来
-
最外层是双引号,内嵌单引号,$等特殊符号依旧可以识别
-
最外层是单引号,内嵌双引号,$等特殊符号无法识别
mkdir “my dir” -> mkdir my dir ->创建my和dir文件夹
mkdir"'my dir'" ->mkdir 'my dir'->创建my dir文件夹