2015-08-15 67 views
2

如何通過套接字將eof信號發送到在遠程shell中運行的命令?如何通過套接字將`eof`信號發送到在遠程shell中運行的命令?

我已經用Python編程,使用套接字,遠程shell應用程序,我發送命令在另一臺PC上執行。

一切工作正常(對於大多數命令),除了像cat > file命令正在導致我的問題。

通常情況下,我會終止上面的命令CTRL + Deof信號),但在我的客戶端按CTRL + D,不會將信號發送到遠程shell。所以我無法終止命令,我被卡住了。

任何人都有建議嗎?

回答

3

當您鍵入ctrl-d時,eof不是信號,而是由tty驅動程序實現爲長度爲0的讀取。

如果你的遠程沒有在tty中運行,那麼你不能生成一個eof,因爲你不能發送一個長度爲0的數據包。但是,如果你運行一個像script /dev/null這樣的程序作爲遠程shell的第一個命令,那麼這會將你的shell包含在一個僞tty中,並且你將能夠發送一個真實的ctrl-d字符(十六進制0x04),例如,pty會將其轉換爲eof並結束一個cat。發送一個stty -a到遠程來檢查您的pty中是否啓用了eol。


stty -a我的終端上說lnext = ^V(字面下一個字符),所以我可以輸入CTRL-VCTRL-d輸入一個真正的十六進制字符0×04。

我選擇了script,因爲我知道它有效地在通信中插入了僞tty,並且對數據流沒有任何影響。這不是它最初的目的(見手冊頁),但那並不重要。

+0

如何從我的終端發送這樣的十六進制值?爲什麼script/dev/null創建一個終端?我通常使用此文件進行垃圾回收。 – Shuzheng

+0

我加了我對答案的回覆。 – meuh

+0

謝謝。對於像我這樣的新手來說,這是非常技術性的;但我會嘗試一下。 – Shuzheng

1

你可以嘗試「這裏」語法改用來標記EOF:這裏需要

cat > file <<-EOF 
... 
... 
EOF 

或只是cat > file <<<"whatever you like to type in"無定界符。

以上內容在Bash手冊中記錄得非常好。不過不知道其他shell是否支持這一點。

相關問題