我正在嘗試通過 SSH 運行命令,并希望在遠程計算機上對命令中的運算式進行評估。
我正在嘗試運行這個:
ssh -A username@ip "sudo docker exec -it "$(docker ps | grep 'some' | awk '{ print $1 }')" python manage.py shell"
但是$(docker ps | grep 'some' | awk '{ print $1 }')當我使用 ssh 命令時,該運算式在遠程機器上沒有正確計算。
確認一下,如果我首先通過 ssh 進入遠程機器,然后運行sudo docker exec -it "$(docker ps | grep 'some' | awk '{ print $1 }')" python manage.py shell,它會正確評估并成功給我一個 shell。作為 ssh 命令的引數的一部分,我只是不能讓它直接從我的本地機器上作業。
我該怎么做才能使它作為 ssh 命令的一部分作業?
執行以下命令的問題是我Pseudo-terminal will not be allocated because stdin is not a terminal.從我的終端 (iTerm)收到一條訊息,并且在執行此命令后沒有像我期望的那樣獲得 shell。
ssh -A username@ip <<'EOL'
name="$(docker ps | grep 'some' | awk '{ print $1 }')"
docker exec -it $name python manage.py shell
EOL
uj5u.com熱心網友回復:
您需要轉義所有需要由遠程 shell 解釋的字符,如下所示:
ssh -A username@ip "sudo docker exec -it \"\$(docker ps | grep 'some' | awk '{ print \$1 }')\" python manage.py shell"
通過這種方式,您將發送屬于 -it 引數的引號,以及未更改的 $ 符號,并且遠程 shell 將執行它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/372394.html
上一篇:GREP僅當整個字串
