如何为 shell 中的所有命令添加前缀,而无需每次都键入它?
我的用例1:
$ git init
$ git add -A
$ git commit
$ git push
前缀应该是git␣
(␣
是空格字符)
init
add -A
commit
push
我的用例2:
sudo docker run my-repo/my-image
sudo docker ps
sudo docker images
前缀应该是sudo docker␣
run my-repo/my-image
ps
images
如果我能做这样的事情那就最好了:
$ git init
$ use_prefix sudo docker
> ps
> images
> exit
$ sudo docker run my-repo/my-image
答案1
您可以使用如下所示的函数:
use_prefix () {
while read -ra c; do
"$@" "${c[@]}"
done
}
这将接受您的前缀作为use_prefix
命令的参数,然后从标准输入中读取要添加前缀的每个命令。
注意:您必须使用 ctrl+c 退出 while read 循环。
答案2
答案3
一种解决方案是设置别名,但是当它们与内置命令和系统二进制文件(例如)发生冲突时,您必须小心ps
。
在您~/.bashrc
添加一些像这样的行(当您下次启动 bash 或输入时生效source ~/.bashrc
):
alias commit='git commit'
alias docker='sudo docker'
alias images='docker images'
alias ps='docker ps'
要运行实际的,ps
您必须输入command ps
或\ps
。这通常只会影响在命令行中的输入,除非您专门使别名可用于脚本。
至于像您建议的那样的交互式 shell 界面,这需要更多的参与。
也就是说,@Jesse_B 的好建议的扩展:
use_prefix () {
while read -p "$* >" -ra c; do
[ "${c[0]}" = "exit" ] && break
"$@" "${c[@]}"
done
}
启用exit
关键字并添加提示,提醒您正在做什么。
答案4
您好,欢迎来到该网站。
解决这个问题的一种可能的解决方法是使用aliasing
虽然它并没有否定“前缀”,但它可以节省很多时间
例如
alias g=git
$ g init
$ g add -A
$ g commit
$ g push
或者
如果有多个单词只需使用引号
alias sd="sudo docker"
sd run my-repo/my-image
sd ps
sd images
但是,您需要在每个会话中重置这些别名