为什么用ssh执行命令工作,但将其分配给var不起作用?

AAa*_*Aaa 1 linux bash scripting

以下命令有效:

ssh host ls -1 /home/folder/anotherFolder | wc -l
Run Code Online (Sandbox Code Playgroud)

但这个不起作用:

ssh host num=`ls -1 /home/folder/anotherFolder | wc -l`
Run Code Online (Sandbox Code Playgroud)

也不是这样

ssh host num=`ls -1 "/home/folder/anotherFolder" | wc -l`
Run Code Online (Sandbox Code Playgroud)

也不是这样

ssh host num=`ls -1 "/home/folder/anotherFolder" | wc -l`
Run Code Online (Sandbox Code Playgroud)

所有这些回报:

ls: cannot access /home/folder/anotherFolder: No such file or directory
Run Code Online (Sandbox Code Playgroud)

因为它在客户端计算机中而不是在远程计算机中查找此文件夹.

编辑:澄清:我需要在ssh上下文中有$ num,而不是在它之外.整个ssh命令是检查$ num是否大于X,如果是,则在远程计算机上执行另一个命令,所有这些命令都在一个ssh会话中完成.

编辑2:谢谢,我已经完成了我需要的帮助.原始任务是删除远程计算机中最旧的文件夹(如果它具有多于X个已定义的文件夹).这对我有用:

ssh host "num=\$(ls -1 \$path | wc -l); if [ \$num -gt $num_of_backups ]; then rm -r $backup/\"\$(ls -t1 $backup | tail -n 1)\"; fi"
Run Code Online (Sandbox Code Playgroud)

虽然,我怀疑它不是做我需要的最好方法.任何其他方式将非常感激.

dog*_*ane 5

请尝试以下方法:

ssh host "num=\$(ls -1 /home/folder/anotherFolder | wc -l); if [ \$num -gt 3 ]; then echo yes: \$num; fi"
Run Code Online (Sandbox Code Playgroud)

您需要转义$符号,否则它们将在本地主机上展开.

或者,使用单引号,然后您不必逃避$:

ssh host 'num=$(ls -1 /home/folder/anotherFolder | wc -l); if [ $num -gt 3 ]; then echo yes: $num; fi'
Run Code Online (Sandbox Code Playgroud)

此外,最好使用$(command)格式而不是`command`命令替换.