Développer le sous-shell avant de l'exécuter?

11

J'exécute souvent des commandes à l'aide de sous-coquilles et j'aimerais parfois que les sous-coquilles soient développées avant d'exécuter quelque chose. De cette façon, je pourrais vérifier ce que je fais et éventuellement modifier ce qui est sur le point de se produire également.

Par exemple, comment puis-je développer la ligne de commande suivante avant de l'exécuter, afin de pouvoir modifier les résultats du sous-shell?

par exemple

$ find -name "test.txt" 
/tmp/test.txt

$ mv $(!!) /tmp/new.txt

Je voudrais voir le sous-shell développé avant d' exécuter la commande, comme ceci:

$ mv /tmp/test.txt /tmp/new.txt

Y a-t-il un moyen de le faire?

Brad Parks
la source
1
zsh peut le faire, mais je suis assez certain que bash ne le peut pas. Dans zsh si vous avez votre curseur sur le paramètre et appuyez sur TAB, cela le développera
Patrick
Depuis, je suis passé à zshet c'est génial et fait cela, comme vous le suggérez ... bon conseil! Je laisse ici la réponse originale, car c'était une bashquestion.
Brad Parks

Réponses:

5

shell-expand-line( \e\C-e) étend les substitutions de commandes dans bash.

$ bind -p|grep shell-ex
"\e\C-e": shell-expand-line

$(!!)\e\C-e exécuterait à nouveau la commande précédente et insérerait la sortie:

"\eo": "$(!!)\e\C-e"

Il étend également d'autres substitutions de commandes, mais il n'existe aucune commande similaire shell-expand-word.

Dans bash 4.0 ou version ultérieure, vous pouvez également activer globstar, taper **/file.txtet utiliser glob-complete-word( \eg) ou glob-expand-word( \C-x*).

Lri
la source
2

Voici une astuce pratique - ajoutez cette ligne à ~ / .inputrc (en créant le fichier si nécessaire):

Control-x: shell-expand-line

Notez que vous pouvez également utiliser l'une des options suivantes pour développer uniquement l'historique, ou vos alias, ou les deux:

Control-x: historique-expansion-ligne

ou

Control-x: alias-expand-line

ou

Control-x: historique et alias-expand-line

Cela a été glané de ce blog , et cette question sur SuperUser , qui est très similaire:

Brad Parks
la source