Если запустить watch
команду, содержащую псевдоним, она не будет расширять псевдоним. Я пробовал как с одинарными, так и с двойными кавычками, на самом деле дали следующий псевдоним:
# alias ll
alias ll='ls -l --color=tty'
Следующая команда не удастся
# watch ll
sh: ll: command not found
Разве не должно работать расширение командной строки в этом случае?
watch
потому что псевдоним должен быть следующим словом, тогда как для выполнения командыwatch
нужны его аргументы. Если вы попробовалиwatch -n 10 <alias>
, bash не расширит псевдоним. Чтобы обойти это, вам нужен псевдоним, который включает в себя нужные параметры (например, `alias watch-10 = 'watch -n 10'), все еще с завершающим пробелом.Может быть, мы могли бы вручную расширить псевдоним, прежде чем часы увидят его?
объяснение
Вывод
alias ll
выглядит так:Таким образом, мы устанавливаем разделитель сокращений равным одинарной кавычке, и вырезаем 2-е поле, оставляя:
т.е. расширенный псевдоним. Это тогда формирует аргументы, данные
watch
.Сделайте функцию, чтобы сделать это
Затем,
работает по желанию. Это ужасно и потерпит неудачу во всех ситуациях. Сожалею.
источник
Я думал, что здесь основная проблема заключается в том, что во время выполнения
watch
аргумент задается как «sh -c
», что означает, что если псевдонимll
не определен вsh(dash shell's)
среде, он не будет его расширять. Но я был неправ, и это не так, ответ Криса выше верен.источник
watch 'alias ll="ls -l --color=tty"; type ll; ll'
.sh -c
", ваше объяснение применимо и кsh
. Я прав?sh
. Обратите внимание на то, что это делает работу:sh -c $'alias ll="ls -l --color=tty"\ntype ll\nll'
Запустили
watch
новую интерактивную оболочку, которая расширит псевдоним:(Он
-x
предназначен для того, чтобы неwatch
использовать свое собственное,sh -c
чтобы обернуть данную команду. Мы не хотим этого, потому что нам нужно перейти-i
кsh
илиbash
, чтобы сделать ее интерактивной оболочкой, которая читает .bashrc и определяет псевдонимы. С помощью-x
watch выполняет команда с использованием exec.)Ха, на самом деле, это не работает. После отображения выходных данных 'll' один раз, а затем сна в течение 2 секунд, задание становится фоновым, с немного загадочным:
Почему это остановилось? Куда делась открытая скобка
[
? Черт, я думал, что это будет отличный ответ, но я не могу заставить его работать.источник