2017-06-04 81 views
0

什麼是很好的方式來SSH和運行Korn shell中的多個命令?我碰到相關的question和最佳答案適合我,但我指定/ bin/bash /在此並通過korn shell運行它。Ksh,更好的方式來SSH和運行多個命令

可以在命令列表下運行(從引用問題的答案中複製)還是可以有更好的方式來運行ksh?

ssh otherhost /bin/bash << EOF 
    ls some_folder; 
    ./someaction.sh 'some params' 
    pwd 
    ./some_other_action 'other params' 
EOF 
+0

的錯誤情況,你是否嘗試過與運行的ksh的例子嗎? (如有疑問,請嘗試一下!);如果您收到錯誤...提供您的完整示例和錯誤;你對'更好'的想法是什麼,你試圖完成這個例子(或者那個鏈接上的其他例子)沒有解決什麼? – markp

+0

@markp正如溝通的問題是,我試過了,它也運行良好,所以沒有錯誤。在命令中我使用/ bin/bash /但是我在korn shell中,這就是爲什麼我問是否有其他方式使用ksh而不使用bash。 – Vipin

+0

我的意思是:用/ bin/ksh替換/ bin/bash(或者你的ksh的適當路徑),看看會發生什麼。 – markp

回答

0

無論您使用的是什麼外殼。我寧願堅持其中一個答案中提供的解決方案,即建議使用連接複用

這是什麼?您將運行單獨的ssh命令,但所有這些命令都將在單個TCP連接中運行。

以及如何實現這一目標?具有類似內容的創建~/.ssh/config配置文件:

Host otherhost 
    ControlPath ~/.ssh/controlmasters/%[email protected]%h:%p 
    ControlMaster auto 
    ControlPersist yes 

然後運行命令,你會在本地運行(與ssh server前綴)。第一個將啓動連接,另一個將使用它

ssh otherhost ls some_folder; 
ssh otherhost ./someaction.sh 'some params' 
ssh otherhost pwd 
ssh otherhost ./some_other_action 'other params' 
+0

一個問題與可能的複製使用ssh/multiplexing(假設每個ssh調用單個命令 - 按照您的示例)是,連續的命令不能依賴於先前命令的結果(即每個調用在主目錄中開始(over));簡單的例子:cd/tmp; pwd ...當在HERE文件中以2行提交時,pwd返回/ tmp ...當作爲2個獨立的ssh/cmd調用提交時,pwd返回/ remote/home /目錄;問題在於解決方案(HERE文檔; ssh/multiplexing;其他)必須考慮所需的一系列操作以及它們是否可以獨立運行 – markp

+1

@markp顯然,這可能是一個缺點,但它也可以還有一個好處就是不能搞亂其他環境。顯然,這些命令之間的依賴關係的要求沒有說明,因此我提供了這種最先進的解決方案作爲一個選項,用於HERE文檔和其他提及的解決方案中的HERE文檔中的醜陋bash重定向,這些解決方案限制了可用性(在與腳本交互的名稱,其他重定向等)。 – Jakuje

2

是的,那是有效的。但是如果以後的命令如果先前的命令失敗了,那麼如果之前的命令失敗了,最好停止鏈。

一個簡單的方法是鏈& &

 A && B && { C || true $? } && D

或者,

 A && 
    B && 
    { C || true $? } && 
    D

C上的把戲允許命令失敗,但保持鏈去...的grep命令一起如果沒有任何匹配,通常需要繼續。 $?的參數真正什麼都不做,除非下集運行-x,那麼它會跟蹤C.