我刚刚意识到我的系统管理员已经为以下对象创建了一个全局别名which
:
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
联机which
帮助页只是说:
如果不在 tty 上,则停止处理右侧的选项。
这是什么意思?
答案1
设置:
$ /usr/bin/which --show-dot a
./a
$ /usr/bin/which --show-tilde a
~/a
如果您想要.
交互运行时的版本,但~
需要重定向时的版本,您可以使用它作为别名:
/usr/bin/which --show-tilde --tty-only --show-dot
演示:
# interactive / on a tty
$ /usr/bin/which --show-tilde --tty-only --show-dot a
./a
# not interactive / redirected to a file
$ /usr/bin/which --show-tilde --tty-only --show-dot a > output
$ cat output
~/a
--tty-only
仅当输出为 tty 时,才会考虑您在后面指定的所有选项。
答案2
这意味着如果输出which
为不是参考终端,然后执行不是过程--read-alias
,--show-dot
和--show-tilde
.
通常是管道、普通文件等。
which watch | foo # not a tty
which watch > foo # not a tty
which watch # tty
which watch >&2 # tty
这些选项在例如下不被识别德比安: