O que estou fazendo errado ao configurar o comando watch a seguir? Isso funciona:
ls -ltr ~/meteofetcher/data/metar/2024/12 | tail -10 | awk '{ print $9 }' | xargs -I {} grep 'LSZH' {}
Mas isso
watch "ls -ltr ~/meteofetcher/data/metar/2024/12 | tail -10 | awk '{ print $9 }' | xargs -I {} grep 'LSZH' {}"
só me deixa assistir o seguinte erro:
Every 2.0s: ls -ltr ~... <hostname>: Fri Dec 20 06:27:05 2024
grep: invalid option -- '-'
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
grep: invalid option -- '-'
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
grep: invalid option -- '-'
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
grep: invalid option -- '-'
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
grep: invalid option -- '-'
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
grep: invalid option -- '-'
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
grep: invalid option -- '-'
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
grep: invalid option -- '-'
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
grep: invalid option -- '-'
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
grep: invalid option -- '-'
Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.
Provavelmente tem algo a ver com a citação, mas tentei fazer o mesmo com aspas simples fora e aspas duplas dentro e ainda não funcionou.
Isso produz o mesmo erro (e não deve expandir o $ afaik)
watch 'ls -ltr ~/meteofetcher/data/metar/2024/12 | tail -10 | awk "{ print $9 }" | xargs -I {} grep "LSZH" {}'
Onde foi que eu errei?
No comando
...
$9
ocorre em uma string entre aspas duplas e, portanto, é expandido pelo shell para o nono argumento de linha de comando do shell (provavelmente nada) antes mesmo dowatch
comando ser executado.Para corrigir isso, certifique-se de que o cifrão
$9
esteja entre aspas:Você também pode excluir
-10
da invocação detail
, pois esse é o padrão, e alterá-lo parahead
removendo a-r
opção parals
, e removerawk
completamente removendo a-l
opção parals
:Você também pode fazer assim:
Ou para evitar
watch
ter quesh
interpretar umash
linha de comando que apenas executa umazsh
instância que interpreta umazsh
linha de comando, corte osh
intermediário com a-x
opção quex
executa o comando diretamente em vez desh
(que não precisamos mais aqui, pois não precisamos de sua capacidade de canalização):Com
zsh
,*(.om[1,10])
expandiria para os 10 arquivos regulares visíveis modificados mais recentemente no diretório atual. Isso permitiria que você lidasse com nomes de arquivo que contêm espaços, tabulações, novas linhas, aspas etc., com os quais seu pipeline original não lidaria devido aawk
apenas emitir o início desses nomes de arquivo exargs
fazer sua própria interpretação de operadores de aspas. Ele também garante que não tentemos executargrep
em diretórios, por exemplo, e evita a execuçãogrep
se não houver um arquivo correspondente.