如何在 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
您可以使用如下函数:
这将接受您的前缀作为
use_prefix
命令的参数,然后从标准输入中读取每个命令的前缀。注意:您必须使用 ctrl+c 退出 while 读取循环。
您可以使用
xargs
,但要适当注意与其使用相关的注意事项然后输入
init
等add -A
,每行一个使用
zsh
shell,您可以运行:$zle_prefix
当您开始输入新命令行时,要在缓冲区开头插入的内容。所以你可以这样做:
以便
sudo docker
在后续命令的开头插入。您可以定义另一个小部件,该小部件以
$zle_prefix
当前光标之前的内容作为初始值:然后你可以输入
然后
sudo docker
将插入所有后续命令。完成后,空白行 ( Ctrl+U) 并Alt+Shift+P再次输入 empty$zle_prefix
。ps
一种解决方案是设置别名,但当它们与内置命令和系统二进制文件(例如)发生冲突时,您必须小心。在您
~/.bashrc
添加一些这样的行(在您下次启动 bash 或键入时生效source ~/.bashrc
):要运行实际
ps
,您必须键入command ps
或\ps
. 这通常只会影响在命令行输入,除非您专门使别名可用于脚本。至于您建议的交互式 shell 界面,这将需要更多的参与。
也就是说,扩展@Jesse_B 的好建议:
启用
exit
关键字并添加提示,提醒您正在做什么。您好,欢迎来到该网站。
一种可能的解决方法是使用
aliasing
虽然它不会否定“前缀”,但它可以节省很多时间
例如
或者
如果有多个单词,只需使用引号
但是,您需要在每个会话中重置这些别名
您本质上需要一个用于特定命令的通用子 shell:
那么:
您键入的任何命令都会以原始命令(绝对或相对,加上任何参数)作为前缀。提示符会提醒您当前所在的原始命令。您可以
exit
完全退出,也可以退出escape
一个命令。您可以在 Linux 的 .bashrc 文件中创建别名: alias init="git init"
当您从终端自动运行 init 命令时,将调用“git init”命令。
假设您使用 bash,如上所述,有很多方法可以做到这一点。这是我发现最方便的方法 - YMMV:
~/.bash_aliases
.bash_profile
.请注意,严格来说,该文件不包含别名,但我使用该名称来保持整洁。您可能想将其称为 .bash_functions。
这是一个非常简单的示例,可以帮助您入门。它不会检查您是否确实传递了参数。
.bash_profile
然后,您可以在您的源代码中添加一行,如下所示:. ~/.bash_aliases
以下是一些示例用法:
请注意,您可以使用 $1 代替 $@,但这将只接受一个参数,而不是考虑传递给函数的所有内容。
HTH。