在远程计算机上执行脚本
问题描述:
我正试图使用ssh
执行远程计算机上可用的脚本。如果通过ssh从客户端运行输出,或者在ssh之后运行到服务器,则输出会有所不同。在远程计算机上执行脚本
该脚本将修剪文件。
tail -n 100 users.txt > temp.txt
rm users.txt
mv temp.txt users.txt
echo $(wc -l users.txt)
echo Done
在从客户端运行:
[email protected]_mac $ ssh [email protected]_mac '~/path_to_script/demo_script.sh'
输出:
0 users.txt
Done
而在服务器侧 ssh'ing后:
[email protected]_mac $ ssh [email protected]_mac
[email protected]_mac $ cd ~/path_to_script/
[email protected]_mac $ ./demo_script.sh
输出:
100 users.txt
Done
我们如何执行一个脚本,可远程机器上?语法不同?
答
您的脚本始终在当前工作目录中查找users.txt
。
在第一个示例中,当前工作目录是您的主目录;这就是为什么你必须使用~/path_to_script/demo_script.sh
而不是./demo_script.sh
来运行脚本。因此,您在输出中获得的行数为~/users.txt
。
在第二个例子,你改变从~
的工作目录~/path_to_script
执行该脚本前,所以输出包含的~/path_to_script/users.txt
的行数。
你应该得到相同的结果。我不认为它是相关的,但'wc -l users.txt'就足够了;你不需要在命令替换中调用它传递给'echo'。 – chepner
实际上,第一个例子中的工作目录是'〜',而不是'〜/ path_to_script',所以你似乎得到两个不同文件'〜/ users.txt'和〜〜/ path_to_script/users的大小。 txt'。 – chepner
是的,这是当前工作目录的问题。修改'demo_script.sh'获取'〜/ path_to_script/users.txt'路径后可以正常工作。 –