Utilisation de la commande watch avec un argument contenant des guillemets

15

J'essaie de faire fonctionner watch correctement avec des commandes qui contiennent des guillemets, et la page de manuel watch n'est pas très détaillée sur le fonctionnement des guillemets. Pour donner un exemple concret, comment puis-je exécuter la commande suivante à l'intérieur de watch:

ps -ef | awk -F' ' '{print $2}'

J'ai essayé:

watch "ps -ef | awk -F' ' '{print $2}'"

et

watch 'ps -ef | awk -F\' \' \'{print $2}\''

mais ni l'un ni l'autre ne fonctionne correctement.

jonderry
la source

Réponses:

18

Je suppose que vous devez échapper au $signe:

watch "ps -ef | awk -F' ' '{print \$2}'"

sinon, il serait interprété par le shell, ce qui entraînerait une chaîne vide ( "") - c'est-à-dire awkafficherait la ligne entière.

bmk
la source
7

Vous pouvez toujours mettre votre commande dans un script shell, puis "regarder" le script.

Resorath
la source
2

Je viens de rencontrer un problème similaire. Après avoir lu la page de manuel de la montre , j'ai trouvé une solution qui pourrait fonctionner, qui est de concaténer des chaînes en bash. La commande finale avait l'air bizarre, comme:

watch "ps -ef | awk -F' ' '"'{print $2}'"'"

ou

watch 'ps -ef | awk -F'"' ' '"'{print $2}'"'"
Adam_Yyx
la source