Se um watch
comando executar um alias, ele não expandirá o alias. Eu tentei com aspas simples e aspas duplas, de fato, com o seguinte apelido:
# alias ll
alias ll='ls -l --color=tty'
O comando a seguir falhará
# watch ll
sh: ll: command not found
A expansão da linha de comando não deve funcionar neste caso?
watch
porque o alias precisa ser a próxima palavra, enquantowatch
precisa de seus argumentos antes da execução do comando. Se você tentouwatch -n 10 <alias>
, o bash não expandirá o alias. Para contornar isso, você precisa de um alias que inclua as opções desejadas (por exemplo, `alias watch-10 = 'watch -n 10'), ainda com um espaço à direita.Talvez possamos expandir manualmente o alias antes que o relógio o veja?
Explicação
A saída de se
alias ll
parece com:Então, definimos o delímetro do corte como aspas simples e cortamos o segundo campo, deixando:
ou seja, o alias expandido. Que então forma os argumentos dados
watch
.Faça uma função para fazê-lo
Então,
funciona como desejado. Isso é horrível e falhará em todos os tipos de situações. Desculpa.
fonte
Eu pensei que aqui o problema básico é durante a execução
watch
, o argumento é dado "sh -c
", o que significa que se o aliasll
não estiver definido nosh(dash shell's)
ambiente, ele não o expandirá. Mas eu estava errado e este não é o caso, a resposta de Chris acima está certa.fonte
watch 'alias ll="ls -l --color=tty"; type ll; ll'
.sh -c
" a sua explicação também é aplicávelsh
. Estou certo?sh
. Observe que este faz o trabalho:sh -c $'alias ll="ls -l --color=tty"\ntype ll\nll'
Executou
watch
um novo shell interativo, que expandirá o alias:(O
-x
objetivo é pararwatch
de usar o própriosh -c
para quebrar nosso comando. Não queremos isso porque precisamos passar-i
parash
oubash
, para torná-lo um shell interativo, que lê .bashrc e define aliases. Com-x
, o watch executa o comando usando exec.)Gah, na verdade, isso não funciona. Depois de exibir a saída de 'll' uma vez e, depois de dormir 2 segundos, o trabalho fica em segundo plano, com o levemente enigmático:
Por que parou? Para onde foi a chave aberta
[
? Porra, pensei que seria uma ótima resposta, mas não posso fazê-lo funcionar.fonte