Scripting
管道後保持管道打開(連接到終端的標準輸入)
**動機:**我經常在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
命令通常提供的任何其他互動式功能,但會讓您將命令發送到管道的右側。這類似於“保持管道打開”是什麼意思?