Я пытаюсь посмотреть количество файлов в моем /tmp/каталоге. Для этого я думал, что эта команда будет работать:
watch sh -c 'ls /tmp/|wc -l'
Но, похоже, работает так, как будто lsне имеет аргументов. А именно, я нахожусь ~, и я получаю количество файлов там вместо /tmp/. Я нашел обходной путь, который, кажется, работает:
watch sh -c 'ls\ /tmp/|wc -l'
Но зачем мне выходить из пространства между lsи /tmp/? Как команда преобразуется watchтаким образом, что lsвывод передается wc, но /tmp/не передается в качестве аргумента ls?
watchнеправильно. Команда, которую вы передаете, watchв свою очередь подаетсяwatch , чтобы sh -c, таким образом вы фактически делаете sh -cдважды.
/tmp аргумент sh, в этом случае не аргумент ls.
watch "sh -c 'ls /tmp | wc -l'"выполнение этой команды должно получить желаемый эффект. Это не ошибка часов, попробуйте,sh -c ls /tmpи вы получите свой домашний каталог (но я понятия не имею, почему ...)