2014-01-27 74 views
0

我有一個bash函數,它將一個數組作爲參數並執行多個命令。Bash:根據用戶輸入在本地或遠程機器上運行一個函數中的所有命令

基於用戶輸入我想在本地或遠程機器上運行此方法中的所有命令。它在命令中有很多引號,用「」回顯會變得很難看。

This is how I am invoking the function right now: 
    run_tool_commands "${ARGS[@]}" 

function run_tool_commands { 
    ARGS=("[email protected]") 
    .. Loads of commands here 
} 

if [ case 1 ]; then 
    # run locally 
else 
    # run remotely 
fi 

This似乎有幫助,但這是可能的,如果我有法文本通過管道輸送到「這裏文件」。

+0

使用'scp'將腳本複製到遠程計算機。然後使用'ssh'登錄並運行腳本。 – sujin

+0

@sujin,哪個腳本?我只想運行一堆命令,不幸的是,它看起來並不像我可以將它們分離出來的腳本。 – user1071840

+0

使用'ssh'通過遠程PC登錄,然後你可以運行所有的命令。 – sujin

回答

0

如果

  1. 所有那些run_tool_commands下要執行的命令是本遠程系統上,以及,
  2. 所有命令的可執行文件,&不別名/功能
  3. 所有這些excutables是在默認路徑。 (無需源.bashrc或者遠程的任何其他文件。)

那麼也許此代碼工作:(未測試):

{ declare -f run_tool_commands; echo run_tool_commands "${ARGS[@]}"; } | ssh -t [email protected] 

OR

{ declare -f run_tool_commands; 
    echo -n run_tool_commands; 
    for arg in "${ARGS[@]}"; do 
     echo -ne "\"$t\" "; 
    done; } | ssh -t [email protected] 

使用的循環,以保留參數周圍的引號。 (可能或可能不需要,未經測試。)

+0

使用這種方法,將爲每個命令建立一個新的ssh連接。 – user1071840

+0

^^否.......... – anishsane

相關問題