shell 中所有命令的前缀

shell 中所有命令的前缀

如何为 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

您可以使用xargs,但要适当考虑注意事项与其使用相关

xargs -L1 git

然后输入等initadd -A每行一个

答案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

但是,您需要在每个会话中重置这些别名

相关内容