J'exécute souvent des commands en utilisant des sous-shell, et j'aimerais parfois que les sous-shell soient développés avant d'exécuter quelque chose. De cette façon, je pourrais vérifier ce que je fais et modifier éventuellement ce qui se passe.
Par exemple, comment puis-je get la command line suivante pour être développée avant de l'exécuter, afin que je puisse éditer les résultats du sous-shell?
par exemple
$ find -name "test.txt" /tmp/test.txt $ mv $(!!) /tmp/new.txt
J'aimerais voir le sous-shell étendu avant d' exécuter la command, comme ceci:
$ mv /tmp/test.txt /tmp/new.txt
Y a-t-il un moyen de le faire?
shell-expand-line
( \e\Ce
) étend les substitutions de commands dans bash.
$ bind -p|grep shell-ex "\e\Ce": shell-expand-line
$(!!)\e\Ce
exécuterait à nouveau la command précédente et insertait la sortie:
"\eo": "$(!!)\e\Ce"
Il étend également d'autres substitutions de commands, mais il n'y a pas de command comme shell-expand-word
.
Dans bash 4.0 ou version ultérieure, vous pouvez aussi activer globstar
, tapez **/file.txt
, et utilisez glob-complete-word
( \eg
) ou glob-expand-word
( \Cx*
).
Voici une astuce pratique: ajoutez cette ligne à ~ / .inputrc (en créant le file si nécessaire):
Control-x: shell-expand-line
Notez que vous pouvez également utiliser l'un des éléments suivants pour développer uniquement l'historique ou vos alias ou les deux:
Control-x: history-expand-line
ou
Control-x: alias-expand-line
ou
Control-x: history-et-alias-expand-line
Cela a été glané de ce blog , et cette question sur SuperUser , qui est très similaire: