我試圖啟動一個由bash命令創建的互動式ssh會話(如下圖所示)。
如果我不添加'ttt',我只得到一個'非互動式'會話訊息,并且 ssh 會話被關閉。
添加'ttt'標志后,會話仍然打開,但我不能輸入命令或與遠程會話互動。
這是我試圖執行的命令的一個簡化版本
這是我試圖執行的命令的一個簡化版本
echo "username@host" | xargs -I{} bash -x -c 'ssh -ttt" $0' {}
不知道是否應該增加一個額外的標志,或者用其他方式來做這件事。
uj5u.com熱心網友回復:
對xargs的輸入(也就是bash,也就是ssh)是來自管道,而不是你的終端。根據更大的環境,這些選項之一應該可以讓ssh從終端讀出:
首先捕獲主機串列到一個陣列,然后使用一個
for回圈而不是xargs。像這樣:readarray -t hostarray < < (echo "username@host") for host in "${hostarray[@]}"; do> ssh "$host"。 done在
xargs中添加o選項,告訴它從/dev/tty(即終端)重定向命令的stdin。通過一個不同的檔案描述符重定向
xargs命令周圍的常規stdin,例如#3(注意:我還沒有測驗過):{ echo "username@host" | xargs -I{} bash -x -c 'ssh -ttt "$0" <。 &3' {}; } 3<&0
BTW,除了ssh沒有得到它應該得到的輸入(即來自終端)的問題之外,你還可能遇到它竊取原本用于其他東西的輸入的問題,比如你希望xargs讀取的主機串列的一部分。參見BashFAQ #89: 我正在逐行讀取一個檔案并運行ssh或ffmpeg,只有第一行被處理!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/324761.html
標籤:
上一篇:Bash函式引數來自變數
