2016-08-17 56 views
1

我看過一些類似的問題,但解決方案似乎不適用於我的情況。附加到GNU屏幕上,然後執行命令

我想SSH到一個特定的屏幕實例的節點機上,然後執行一些命令

我現在的流程是這樣的:

在遠程計算機上創建一個屏幕實例:

screen -dmS "my_screen"

從我的本地機器我做這樣的事情:

ssh <user>@<remote> -a -x -t screen -x -r my_screen -X stuff 'ruby my_script.rb'

但輸出僅僅是:在(IP)

連接關閉。

和ruby腳本未運行。

如果我分隔命令則腳本運行正確例如:

ssh <user>@<remote> -a -x -t screen -x -r my_screen 

它連接到屏幕上,然後我手動輸入:

ruby my_script.rb 
exit 

然後,腳本在屏幕作爲執行意。

將命令發送到屏幕的正確方法是什麼?

+2

自動執行'screen'是kludgey。由於現代建築和體面的文檔,「tmux」更容易自動化。 – chicks

回答

0

在第二個示例中,您將通過在控制檯中鍵入命令來執行該命令。如果這是您想要模擬的行爲,則可以使用stuff命令讓screen將文本粘貼到控制檯中以執行它。

ssh <user>@<remote> -a -x -t screen -x -r my_screen -X stuff \"ruby my_script.rb^M\" 

(注意^ M是使用CTRL-V,CTRL-M生成的)。

這不會顯示任何內容到您的開放終端,但是當您重新連接到屏幕時,您應該看到您的命令的輸出(假設屏幕在發送命令時處於控制檯窗口)這種方法的風險)。

+0

非常感謝,這工作! 我不知道爲什麼,但我的其他方法來放行換行似乎沒有註冊時,在遠程屏幕上執行,但這完美的工作! – Mundisoft

0

你應該使用exec而不是東西。顧名思義,exec執行屏幕內的命令

ssh <user>@<remote> -a -x -t screen -x -r my_screen -X exec ruby myscript.rb 
相關問題