Si un exécuter la watch
commande contenant un alias, il ne développera pas l'alias. J'ai essayé les deux guillemets simples et doubles, en fait, étant donné le pseudonyme suivant:
# alias ll
alias ll='ls -l --color=tty'
La commande suivante va échouer
# watch ll
sh: ll: command not found
L'expansion en ligne de commande ne devrait-elle pas fonctionner dans ce cas?
watch
car l'alias doit être le mot suivant, alors quewatch
ses arguments doivent précéder la commande à exécuter. Si vous avez essayéwatch -n 10 <alias>
, bash ne développera pas l'alias. Pour contourner ce problème, vous avez besoin d'un alias incluant les options souhaitées (par exemple, `alias watch-10 = 'watch -n 10'), toujours avec un espace de fin.Peut-être pourrions-nous développer manuellement l'alias avant que la montre ne le voie?
Explication
La sortie de
alias ll
ressemble à:Nous avons donc défini le délimètre de cut sur guillemet simple et coupons le deuxième champ en laissant:
c'est-à-dire l'alias développé. Cela forme alors les arguments donnés à
watch
.Faire une fonction pour le faire
Ensuite,
fonctionne comme vous le souhaitez. C'est affreux et échouera dans toutes sortes de situations. Pardon.
la source
Je pensais que le problème de base est lors de l'exécution
watch
, l'argument est donné à "sh -c
" ce qui signifie que si un aliasll
n'est pas défini dans l'sh(dash shell's)
environnement, il ne sera pas développé. Mais je me suis trompé et ce n'est pas le cas, la réponse de Chris ci-dessus est juste.la source
watch 'alias ll="ls -l --color=tty"; type ll; ll'
.sh -c
", votre explication est applicablesh
aussi. Ai-je raison?sh
. Notez que cela fait le travail:sh -c $'alias ll="ls -l --color=tty"\ntype ll\nll'
Avoir
watch
exécuté un nouveau shell interactif, qui développera l'alias:(Le
-x
but est d'empêcherwatch
d'utiliser sa propre commandesh -c
pour envelopper notre commande donnée. Nous ne le voulons pas car nous devons passer-i
àsh
oubash
, pour en faire un shell interactif, qui lit .bashrc et définit des alias. Avec-x
, watch exécute le commande utilisant exec)Gah, en fait, ça ne marche pas. Après avoir affiché la sortie de 'll' une fois, puis dormi 2 secondes, le travail se tâche en arrière-plan, avec le peu énigmatique:
Pourquoi cela s'est-il arrêté? Où est passé l'accolade
[
? Je pensais que ce serait une excellente réponse, mais je ne peux pas le faire fonctionner.la source