Неожиданное поведение команды watch
Следующая команда, которую я хочу использовать для отслеживания количества файлов в каталоге, не показывает требуемое значение динамически.
watch "echo \`ls -l| wc -l\`"
Однако следующая команда работает хорошо.
watch "ls -l| wc -l"
Чем объясняется такое поведение?
1 ответ
Это потому, что оболочка расширяет тылы перед watch
когда-либо выполняется. Если вы используете set -x
вы увидите, что команда, которая на самом деле вызывает
watch "echo 42"
что объясняет, почему это всегда то же самое.
Вы можете избежать `
с обратной косой чертой, чтобы передать это буквально:
watch "echo \`ls -l | wc -l\`"
Или проще, используя одинарные кавычки, которые запрещают все расширения:
watch 'echo `ls -l | wc -l`'