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)
虽然,我怀疑它不是做我需要的最好方法.任何其他方式将非常感激.
请尝试以下方法:
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`命令替换.