ssh
我正在我的脚本部分执行以下命令。该命令旨在减少ls
选项中的文件大小并将其存储到变量中。然后打印变量:
echo "Enter srouce file";
read src_file;
src_size =`ls -latr $src_file | awk '{ print $5 }' `;
echo "The source file size is $src_size ";
当它在命令行上执行时,效果很好。
当我通过以下方式在脚本中尝试相同的命令时ssh
:
ssh user@server "echo "enterfile";read src_file;echo "enter path ";read path;cd $path;src_size=`ls -latr $src_file | awk '{ print $5 }' ` ; echo The source file size is $src_size;"
这失败了。它存储一些本地临时值并返回相同的文件大小而不是正确的文件大小。
答案1
使用脚本可以避免因引用问题而弄乱命令。
它更干净、更易于管理并且看起来更好:)!
例如,只需这样做:
echo "Enter source file"
read src_file
ssh user@server 'bash -s' < /path/to/local_script.sh "$src_file"
内容local_script.sh
:
#!/bin/bash
src_file="$1"
src_size =`ls -latr $src_file | awk '{ print $5 }'`
echo "The source file size is $src_size "
不要忘记添加路径local_script.sh
:)
答案2
如果不进行一些转义,就无法将双引号嵌套在其他双引号中 - 并且通过将反引号放入双引号中,它们将在本地计算机而不是远程计算机上进行评估。
类似这样的事情应该可以完成您想要完成的任务:
ssh user@server 'echo "Enter file: "; read src_file; echo "Enter path: "; read path; cd $path; src_size=`ls -latr $src_file | awk "{ print \$5 }"`; echo "The source file size is $src_size;"'
请注意,我需要将 更改为'{ print $5 }'
,"{ print \$5 }"
转义 ,$
因为它现在位于双引号而不是单引号内,并且我不希望$5
shell 解释 。