2015-09-17 104 views
0

我想用ssh遠程運行一個腳本,並且需要使用遠程服務器的一些參數。保留遠程服務器位置temp/test/test.prm文件中的所有參數。獲取「invoke.sh:line 20:。/temp/test/test.prm:沒有這樣的文件或目錄」的錯誤。在unix遠程服務器中執行參數文件

請參閱下面的示例腳本。在腳本非常基本的知識,使PLZ告訴我

#!/bin/sh 
Param1=$1 
Param2=$2 

ssh [email protected] 

      . ${Param1}/Client/scripts/Sample1.prm 

cd $prmHome/$prmSetPath 

ls | sed '/\.log$/d' > $prmHome/$prmScript/Filelist.txt 

cd $prmHome/$prmScript 

while read LINE 

do 

ExportFilName=$LINE 

./conversion.sh $prmHome/tmp_export/convert_$Param2.csv $prmHome/$prmSetPath/'$ExportFilName' 

done < Filelist.txt 


rm -rf $prmHome/$prmScript/Filelist.txt 

exit 0 



Content of Sample1.prm 
prmHome=/iis/home 
prmSetPath=/export/set 
PrmScript=/Client/scripts 

我已經試過同一線槽命令行使用ssh連接到遠程服務器後,它是工作,但是當我試圖通過一個腳本做同樣的( invoke.sh)其拋出沒有這樣的文件或目錄錯誤

+0

看起來你正在試圖「源」你的參數文件。但爲什麼?它是一個shell腳本還是什麼? – Samuel

+0

或者只是一個普遍的問題,你打算在遠程主機上運行哪部分代碼? – deimus

回答

1

UPDATE

這是不明確,將無法正常工作!

ssh [email protected] 
      . ${Param1}/Client/scripts/Sample1.prm 

如前所述,你應該先使用

ssh [email protected] ". ${Param1}/Client/scripts/Sample1.prm" 

格式。

其次,你期望下面的命令做什麼?

. ${Param1}/Client/scripts/Sample1.prm

注意,有在.和路徑,這對於source的同義詞之間的空間。所以也請檢查Sample1.prm是否有有效的命令。


看起來您並未在遠程主機上運行任何ssh shell命令,但僅在本地主機上運行。

你究竟如何運行ssh shell命令?

您示例中的代碼片段格式不正確。 一般結構應該看起來像這樣,例如

請修改您調用腳本,或使問題的格式爲宜。

+0

我需要在遠程服務器上運行腳本,但我需要傳遞一些參數。 我想通過另一個腳本從本地服務器調用相同的腳本。所以想到我的本地腳本首先使用ssh連接到遠程服務器(我不確定這是否是正確的方式,首次執行),然後我可以讀取遠程服務器中存在的參數文件,然後使用一些參數參數文件作爲運行遠程腳本)。 – Sham

+0

哦!顯示你的腳本的內容! – deimus

+0

你的問題中的代碼無關你想做什麼。你應該用多個命令'ssh user1 @ server1'df -H''來使用以下結構參數 – deimus

0

更新:

如果你想通過ssh遠程服務器上執行代碼,你可以做到以下幾點:

  1. 你要遠程執行代碼中創建單獨的文件my_script.sh,並粘貼以下代碼:

    #!/bin/bash 
    function my_function() { 
        prmHome=$1 
        prmSetPath=$2 
        PrmScript=$3 
    
        cd $prmHome/$prmSetPath 
    
        ls | sed '/\.log$/d' > $prmHome/$prmScript/Filelist.txt 
    
        cd $prmHome/$prmScript 
    
        while read LINE 
    
        do 
    
        ExportFilName=$LINE 
    
        ./conversion.sh $prmHome/tmp_export/convert_$Param2.csv $prmHome/$prmSetPath/'$ExportFilName' 
    
        done < Filelist.txt 
        rm -rf $prmHome/$prmScript/Filelist.txt 
    
        exit 0 
        } 
    
  2. 然後,您可以通過採購來遠程調用您的功能在遠程服務器上的文件:

    ssh [email protected] '. my_script.sh; my_function "/iis/home" "/export/set" "/Client/scripts"'

就是這樣:)


此代碼將無法正常工作:

ssh [email protected] 

      . ${Param1}/Client/scripts/Sample1.prm 

更改它這樣:

ssh [email protected] ". ${Param1}/Client/scripts/Sample1.prm" 
+0

謝謝,但我希望執行所有在遠程服務器(server1)上這行後面提到的代碼。我怎樣才能做到這一點? – Sham

+0

@Sham嗯,好吧,但爲什麼不把所有的代碼放在單獨的文件中,然後通過ssh調用它,如下所示:'ssh $ my_server「。/ /myscpritp.sh; my_function $ param1 $ param2」'? – Samuel

+0

你能解釋一下嗎?把所有代碼的手段(我需要在遠程服務器上運行的所有代碼?)你是什麼意思my_function。由於我發佈了代碼,所以您可以從中獲得原始文章。對不起,在ssh上沒有太多想法 – Sham