Scripting

管道後保持管道打開(連接到終端的標準輸入)

  • November 20, 2020

**動機:**我經常在android設備上打開一個遠端shell(使用adb/android調試橋),並想在我的機器(不是android設備,因為我有多個)上編寫腳本來幫助我第一次連接到shell。

例如,我可能想將目錄更改為特定文件夾, echo "cd /storage/self/primary/Download; mkdir bobby" | adb shell但是一旦執行程式碼,stdin in 立即關閉,shell 也立即關閉。我添加mkdir bobby只是為了測試該行是否實際執行,並且確實如此。

例如,當我執行時,shell 將在 5 秒內自動關閉echo "cd /storage/self/primary/Download; mkdir bobby; sleep 5" | adb shell。不幸的是,heredoc 沒有幫助,因為一旦找到 heredoc 分隔符,它也會關閉 shell。

**問題:**如何在將命令輸入終端后保持標準輸入與終端的連接,以便我可以輸入。這對 沒有挑戰ssh,因為您可以直接傳遞可選命令。


抱歉,如果這個問題已經問過,我不知道該怎麼表達。

為了保持管道打開,不要讓它關閉。您可以通過添加cat到管道的左側來做到這一點:

{ echo "cd /storage/self/primary/Download; mkdir bobby"; cat; } | adb shell

cat程序將在 之後執行echo,並將其標準輸出連接到adb shell命令,而其標準輸入從終端讀取(您可以在其中鍵入)。

一旦cat終止(通過按下Ctrl+C中斷或Ctrl+D信號輸入結束),管道將終止。

請注意,這可能不會為您提供帶有提示和命令行完成的完整互動式 shell 或該adb shell命令通常提供的任何其他互動式功能,但會讓您將命令發送到管道的右側。

這類似於“保持管道打開”是什麼意思?

引用自:https://unix.stackexchange.com/questions/620561