CIs*_*ies 11 command-line bash
抱歉,标题不提供信息...
我正在寻找类似的东西,这样我就可以缩短重定向标准输出。我知道执行前面带有空格的命令不会将其写入历史记录,并且有一些“神奇”运算符,例如“!!”等。
我基本上正在寻找类似的东西,这将允许我替换>/dev/null
,所以,我将能够写,例如
git pull !!!
这相当于git pull>/dev/null
有这样的事吗?我可以覆盖现有的运算符/编写新的运算符吗?
Pet*_*des 26
别名扩展仅查看一行的第一个标记/单词,因此无法被git pull !!!
别名扩展替换。
但是,即使放置在命令之前,重定向也会起作用,因此您可以使用别名来执行此操作:
alias quiet='>/dev/null '
Run Code Online (Sandbox Code Playgroud)
在别名扩展末尾留下空格会使 bash 考虑别名扩展的下一个标记。(这就是为什么这样做很常见alias sudo='sudo '
)。所以这甚至不会破坏你的别名。例子:
$ ll *.s xyz
ls: cannot access 'xyz': No such file or directory
-rw-r--r-- 1 peter peter 12 Mar 6 20:15 a64.s
-rw-r--r-- 1 peter peter 72 Mar 6 21:03 arm.s
-rw-r--r-- 1 peter peter 30 Mar 15 17:38 foo.s
-rw-r--r-- 1 peter peter 42 Mar 6 13:12 mips.s
$ quiet ll *.s xyz # ll alias expanded successfully, stdout discarded
ls: cannot access 'xyz': No such file or directory
$ # stderr is not redirected.
Run Code Online (Sandbox Code Playgroud)
gle*_*man 16
我会用一个函数
quietly() {
# execute the remaining arguments as a command, but redirect output
"$@" > /dev/null
}
quietly git pull
Run Code Online (Sandbox Code Playgroud)
或者读取 stdin 并丢弃它的函数:
q() { cat > /dev/null; }
git pull | q
Run Code Online (Sandbox Code Playgroud)
这些都不是重定向 stderr:如果出现问题,您应该知道它。
正如Peter Cordes的回答所示,混叠是可能的。另一种方法是设置环境变量。这允许更自然的重定向语法:
export d0='/dev/null'
Run Code Online (Sandbox Code Playgroud)
然后您可以将其用作
git pull >$d0
Run Code Online (Sandbox Code Playgroud)