对不起,没有信息的标题......
我正在寻找的是这样的东西,它可以让我缩短重定向标准输出。我知道在执行带有空格的命令之前不会将其写入历史记录,并且有一些“魔术”运算符,例如“!!”等。
我基本上是在寻找类似的东西,它可以让我替换>/dev/null
,所以,我可以写,例如
git pull !!!
这将相当于git pull>/dev/null
有这样的事情吗?我可以覆盖现有的运算符/编写一个新的运算符吗?
对不起,没有信息的标题......
我正在寻找的是这样的东西,它可以让我缩短重定向标准输出。我知道在执行带有空格的命令之前不会将其写入历史记录,并且有一些“魔术”运算符,例如“!!”等。
我基本上是在寻找类似的东西,它可以让我替换>/dev/null
,所以,我可以写,例如
git pull !!!
这将相当于git pull>/dev/null
有这样的事情吗?我可以覆盖现有的运算符/编写一个新的运算符吗?
别名扩展只查看一行的第一个标记/单词,因此无法
git pull !!!
被别名扩展取代。但是,即使放在命令之前,重定向也可以工作,因此您可以使用别名来执行此操作:
在别名扩展的末尾留下空格使 bash 考虑别名扩展的下一个标记。(这就是为什么这样做很常见
alias sudo='sudo '
)。所以这甚至不会破坏你的别名。例子:我会使用一个函数
或者一个读取标准输入并丢弃它的函数:
这些重定向标准错误都不是:如果出现问题,您应该知道它。
正如Peter Cordes的回答所示,别名是可能的。另一种方法是设置环境变量。这允许更自然的重定向语法:
然后您可以将其用作
有可能,是的,但不是通过别名——而是使用 bash 的
extdebug
函数,它允许在命令执行之前对命令进行任意更改(通过抑制原始命令并评估新命令)。陷阱处理程序将在 中获取原始输入
$BASH_COMMAND
,从处理程序返回 1 将取消原始命令。如果您输入多个;
-separated 命令,则会为每个单独调用陷阱。具体来说:
这将用命令中的任何地方替换任何
!!!
内容> /dev/null
。你再也做不到echo 'Hi!!!'
了。如果您更喜欢仅在命令末尾匹配,那也很容易。
作为另一个示例,您可以使用它来
command please
别名sudo command
:还有另一种方法可以实现类似的事情:您可以使用
bind
or重新定义 Bash (readline) 中的键~/.inputrc
,您也可以使用它来重新定义键序列。例如, inputrc entry
"!!!": "> /dev/null"
或等效的 shell 命令bind '"!!!": "> /dev/null"'
将导致> /dev/null
在您尝试键入时插入文本!!!
。请注意,Bash 无法预测未来,这意味着如果您只想输入单个
!
,则在它出现之前会有一点延迟 - 那是 Bash 等待查看它是否会匹配序列。这会很烦人,所以不要绑定字母和东西。实际上,最好改为绑定 Ctrl 或 Alt 热键。例如,您可以Alt+Q使用
"\eq": "> /dev/null"
.以前:https ://superuser.com/a/1459211