2017-02-28 117 views
0

我正试图使用​​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 

我们如何执行一个脚本,可远程机器上?语法不同?

+0

你应该得到相同的结果。我不认为它是相关的,但'wc -l users.txt'就足够了;你不需要在命令替换中调用它传递给'echo'。 – chepner

+0

实际上,第一个例子中的工作目录是'〜',而不是'〜/ path_to_script',所以你似乎得到两个不同文件'〜/ users.txt'和〜〜/ path_to_script/users的大小。 txt'。 – chepner

+0

是的,这是当前工作目录的问题。修改'demo_script.sh'获取'〜/ path_to_script/users.txt'路径后可以正常工作。 –

回答

1

您的脚本始终在当前工作目录中查找users.txt

在第一个示例中,当前工作目录是您的主目录;这就是为什么你必须使用~/path_to_script/demo_script.sh而不是./demo_script.sh来运行脚本。因此,您在输出中获得的行数为~/users.txt

在第二个例子,你改变~的工作目录~/path_to_script执行该脚本前,所以输出包含的~/path_to_script/users.txt的行数。

相关问题