Réponses:
Essayez ce gars =):
sed -n 'line_num p' | bash
ou
"$(sed -n 'line_num p')"
line_numet p, donc par exemple si line_numest 123, alors vous pouvez sed -n 123p | bash. Et si cela shsuffit, utilisez simplement shau lieu de bash.
sed -n 'line_num p' | shpourrait être une autre solution? Est-ce que celui-ci a plus de compatibilité?
shréellement le shell . Sur les systèmes Debian (et dérivés) , shc'est généralement le cas dash. Si le script est écrit pour dash (ou repose autrement sur une syntaxe portable), alors probablement, oui, mais s'il est écrit pour, bashalors certainement pas.
historyet 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:
history -s "$(sed -n 'line_num p')"
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.
man history
historyest intégré, il est donc documenté dans help history(ou man 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...
{ head -n"$((NUM-1))"; IFS= read -r line; } </path/to/script >/dev/null
eval "$line"
Cela n'obtiendra que la $NUMligne 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:
</path/to/script sed "${NUM}q;d" >/tmp/"$$"
. /tmp/"$$" ; rm /tmp/"$$"
eval.
gnu seda le edrapeau donc quelque chose comme ça sed "${NUM}"'!d;s/^//e;q'marcherait aussi