
Я только что понял, что мой системный администратор создал глобальный псевдоним для 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
Варианты не распознаются, например,дебиан: