Bash: Как использовать команду псевдонима в сочетании с часами - PullRequest
0 голосов
/ 21 февраля 2019

Я хотел бы использовать команду alias в bash в сочетании с командой watch.Команда watch - это несколько связанных команд.

Очень простой пример того, как я думаю, что это будет работать (но это не так):

alias foo=some_command          # a more complicated command
watch -n 1 "$(foo) | grep bar"  # foo is not interpreted as the alias :(

1 Ответ

0 голосов
/ 21 февраля 2019

watch -n 1 "$(foo) | grep sh" неверно по двум причинам.

  1. Когда оболочка выполняет watch "$(cmdA) | cmdB", $(cmdA) расширяется перед работает watch.Затем watch выполнит вывод из cmdA в качестве команды (которая в большинстве случаев не будет выполнена) и перенаправит вывод этой команды на cmdB.Возможно, вы имели в виду watch 'cmdA | cmdB'.

  2. Псевдоним foo определен только в текущей оболочке.watch не является встроенной командой и, следовательно, должен выполнять свою команду в другой оболочке, которая не знает псевдоним foo.В этом ответе есть небольшой трюк , однако нам нужно внести некоторые изменения, чтобы он работал с трубами и параметрами

alias foo=some_command
alias watch='watch -n 1 ' # trailing space treats next word as an alias
watch foo '| grep sh'

Обратите внимание, что параметры для watch должны быть указаны внутри псевдонима watch.Конечный пробел заставляет только следующее слово обрабатываться как псевдоним.С watch -n 1 foo bash попытается расширить -n как псевдоним, но не foo.

...