
我想在遠端 shell 的互動式環境中執行命令,以便.bash_profile
在執行命令之前載入我的遠端 shell。
這很好用:
echo "command" | ssh user@remote_host
[1]
但它給了一個錯誤
偽終端不會被分配,因為 stdin 不是終端。
我不知道這是否是一個問題,因為上面的命令非常適合我的目的,但我仍然在尋找一個解決方案來讓它消失,我發現
ssh -t -t
[2]
將它們結合起來,echo "command" | ssh -tt user@remote_host
效果非常好。
但由於 Git bash 上的一些奇怪原因,執行命令返回後,我無法再輸入。我在 Cygwin 上測試了它,效果很好,所以只有 Git bash 有這個問題。
我嘗試輸入exit
以防它仍然隱形地卡在遠端 shell 中,但沒有任何作用。
ssh -tt
您知道在 Git bash 上執行操作可能會出現什麼問題嗎?
答案1
“偽終端不會被分配”訊息僅供參考。如果您執行的命令不需要終端,您最好執行 ssh,並選擇-T
停用 PTY 分配並關閉訊息。
聽起來您的本地 TTY 由於某種原因處於奇怪的狀態。運行stty sane
應該將終端重置為可用狀態。我知道你說你不能打字,但你可以嘗試這樣做:
- 鍵入 Control-Q(即按住“Control”鍵並按“Q”)以取消可能存在的任何 Ctrl-S/Ctrl-Q 暫停
- 類型控制-J。這是一個換行符,用於確保 shell 準備好讀取新的命令列。
- 輸入“stty sane”,然後再次輸入 Control-J。即使您鍵入的內容沒有出現在螢幕上,也請嘗試一下。
如果這不起作用,核心選項是從另一個終端在卡住的 TTY 上執行“stty sane”。
- 打開另一個終端機視窗。
- 使用「ps」找出卡住的會話所在的 PTY。
stty sane
使用從 PTY 重定向的輸入運行。
例如,在 Linux 上:
$ ps -fu jdoe
...
jdoe 2083 2080 0 22:17 pts/0 00:00:00 /bin/bash <-- TTY is "/dev/pts/0"
$ stty sane < /dev/pts/0