Question Utiliser la commande précédemment exécutée comme argument correctement échappé


Un cas d'usage courant pour moi est d'exécuter une commande dans le terminal, cette commande peut être longue, contenir des tuyaux grep | awk | sort, des citations de toutes sortes '  ", échappé aux guillemets entre guillemets "\"somethings\"" etc.

Mais il se peut que je doive exécuter cette même commande encore et encore. Pour les commandes simples, j'utilise watch ainsi

watch -n 5 'ls -l | wc -l'

Mais si la commande est longue et contient des citations, il devient très fastidieux et enclin à l'erreur de tout échapper avant de passer à watch.

Un raccourci ou une manière intégrée d'obtenir une chaîne correctement échappée de la commande précédente serait bien. Y a-t-il? J'ai essayé aveuglément $ watch -n 5 ! et $watch -n 5 '!' mais ça ne marcherait pas.


1
2017-07-19 12:59


origine


watch commande n'a pas d'historique de commande préalable. Shell, cependant, a fc commander. Regardez ce post: askubuntu.com/a/800459/295286 - Sergiy Kolodyazhnyy
Fonctionne comme un charme! J'ai utilisé "PCMD =` fc -nl -1`; montre -n 5 $ PCMD ". S'il vous plaît poster votre réponse comme une réponse appropriée pour que je puisse l'accepter - xaxa


Réponses:


Bien que , watch n'a pas d'historique de commande, l'historique de shell peut être utilisé à cette fin. fc -nl -1 permet de lister les commandes précédentes exécutées par shell. On peut faire

PCMD=`fc -nl -1`; watch -n 5 $PCMD

Ou même plus court

watch -n 5 $(fc -nl -1)

Exemple,

$> stat /etc/passwd                                                                                           
  File: '/etc/passwd'
  Size: 2989        Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 6030444     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-06-17 20:45:17.520447811 -0600
Modify: 2016-06-17 20:45:17.520447811 -0600
Change: 2016-06-17 20:45:17.528447711 -0600
 Birth: -
$> watch -n 5 $(fc -nl -1)    

3
2017-07-19 14:05