Parfois, j'ai besoin d'exécuter une seule commande qui se trouve dans un script shell.
Je sais déjà que je sed -n 'line_num p'
peux imprimer cette ligne. Mais comment puis-je exécuter cette ligne spécifique imprimée en tant que commande?
Parfois, j'ai besoin d'exécuter une seule commande qui se trouve dans un script shell.
Je sais déjà que je sed -n 'line_num p'
peux imprimer cette ligne. Mais comment puis-je exécuter cette ligne spécifique imprimée en tant que commande?
Essayez ce gars =):
sed -n 'line_num p' | bash
ou
"$(sed -n 'line_num p')"
line_num
etp
, donc par exemple siline_num
est 123, alors vous pouvezsed -n 123p | bash
. Et si celash
suffit, utilisez simplementsh
au lieu debash
.sed -n 'line_num p' | sh
pourrait être une autre solution? Est-ce que celui-ci a plus de compatibilité?sh
réellement le shell . Sur les systèmes Debian (et dérivés) ,sh
c'est généralement le casdash
. Si le script est écrit pourdash
(ou repose autrement sur une syntaxe portable), alors probablement, oui, mais s'il est écrit pour,bash
alors certainement pas.history
et que je vois que je veux exécuter la ligne 900, puis-je exécuter la ligne 900 d'une manière ou d'une autre?Si vous faites cela de manière interactive, vous pouvez écrire la ligne dans l'historique de bash:
Appuyez ensuite sur ↑Enterpour insérer la ligne dans le tampon de ligne de lecture et exécutez-la; qui vous donne une chance de regarder la ligne avant qu'il ne soit trop tard.
la source
man history
history
est intégré, il est donc documenté danshelp history
(ouman bash
, mais c'est beaucoup de lecture). Citant ce qui précède,history -s
"ajoutera les ARG à la liste d'historique comme une seule entrée"Tu peux faire...
Cela n'obtiendra que la
$NUM
ligne de votre script dans la variable shell$line
, puis l'évaluera comme une commande dans le shell actuel.Une autre façon de procéder pourrait ressembler à ceci:
la source
eval
.gnu sed
a lee
drapeau donc quelque chose comme çased "${NUM}"'!d;s/^//e;q'
marcherait aussiModifiez-vous votre script avec vim (vi sous Linux)? Dans vi, ajoutez un mappage:
et ensuite quand vous êtes sur la ligne intéressante de vi, appuyez sur F4
la source
Dans bash, vous pouvez exécuter la commande suivante:
la source