2017-02-28 114 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的行數。

相關問題