[英]How to add automatic prefix before bash command ([prefix] docker exec)
我想問是否有辦法在某些命令之前添加前綴。 關於 SO 的大多數類似問題都涉及在命令的 output 中添加前綴,而不是在命令執行本身中添加前綴,所以這是我的示例:
I need to connect to docker container, I'm working on Windows and use ConEmu with bash terminal so I need to use winpty prefix to be able to connect to unix terminal of the container as follows:
docker exec -it my_container bash
結果是:
unable to setup input stream: unable to set IO streams as raw terminal: The handle is invalid.
所以我需要使用:
winpty docker exec -it my_container bash
root@0991eb946acc:/var/www/my_container#
不幸的是,如果我從乞求的 winpty 添加,我的自動完成不起作用,所以我需要首先編寫 docker 命令,然后跳轉到命令的開頭輸入 winpty。 我想讓 bash 自動檢測每當我運行“docker exec”在它之前添加 winpty 前綴。 如何做到這一點? 我知道我可以為
alias de='winpty docker exec'
但我寧願繼續使用正常的 docker 命令流來自動完成。
編寫一個包裝 docker 的docker
。 如果它是docker exec
命令調用winpty
,否則使用command
回退到底層docker
二進制文件。
docker() {
if [[ ${1:-} == exec ]]; then
(set -x; winpty docker "$@")
else
command docker "$@"
fi
}
我把set -x
放在那里,這樣它就會在調用winpty
時打印出來,這樣就沒有隱藏的魔法。 當我的 shell 做鬼鬼祟祟的事情時,我喜歡被提醒。
$ docker exec -it my_container bash
+ winpty docker exec -it my_container bash
root@0991eb946acc:/var/www/my_container#
I'm not familiar with winpty
but I expect winpty docker
will call the docker binary and not this shell function. 但是,如果我錯了,你就會遇到麻煩,因為 function 會在一個無限的遞歸循環中一遍又一遍地調用自己。 哎呀! 如果發生這種情況,您可以使用which
來確保它調用二進制文件。
docker() {
if [[ ${1:-} == exec ]]; then
(set -x; winpty "$(which docker)" "$@")
else
command docker "$@"
fi
}
如果您想知道 shell 語法:
${1}
是函數的第一個參數。${1:-}
確保您在啟用set -u
以檢測未設置變量的情況下不會收到“未綁定變量”錯誤。"$@"
是所有函數的 arguments 的數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.