Antworten:
Versuchen Sie diesen Kerl =):
sed -n 'line_num p' | bash
oder
"$(sed -n 'line_num p')"
line_numund setzen. pWenn line_numbeispielsweise 123 lautet, können Sie dies tun sed -n 123p | bash. Und wenn shes reicht, dann verwenden Sie einfach shstatt bash.
sed -n 'line_num p' | shalso eine andere Lösung sein? Ist dieser mehr Kompatibilität?
shtatsächlich ist. Auf Debian (und abgeleiteten) Systemen shist in der Regel dash. Wenn das Skript für geschrieben wurde dash (oder auf andere Weise auf portabler Syntax basiert ), dann wahrscheinlich, ja, aber wenn es für geschrieben wurde, bashdann fast definitiv nicht.
historyund sehe, dass ich Zeile 900 ausführen möchte, Zeile 900 irgendwie ausführen kann?
Wenn Sie dies interaktiv tun, können Sie die Zeile in den Bash-Verlauf schreiben:
history -s "$(sed -n 'line_num p')"
Drücken Sie dann ↑Enter, um die Zeile in den Readline-Puffer einzufügen, und führen Sie sie aus. Das gibt Ihnen die Möglichkeit, einen Blick auf die Linie zu werfen, bevor es zu spät ist.
man history
historyist eingebaut, daher ist es dokumentiert in help history(oder man bash, aber das ist viel Lesen). Wenn Sie das Obige zitieren, history -swerden "die ARGs als einzelner Eintrag an die Verlaufsliste
Du kannst tun...
{ head -n"$((NUM-1))"; IFS= read -r line; } </path/to/script >/dev/null
eval "$line"
Dadurch wird nur die $NUMZeile aus Ihrem Skript in der Shell-Variablen abgerufen $lineund dann als Befehl in der aktuellen Shell ausgewertet.
Ein anderer Weg, dies zu tun, könnte folgendermaßen aussehen:
</path/to/script sed "${NUM}q;d" >/tmp/"$$"
. /tmp/"$$" ; rm /tmp/"$$"
eval.
gnu sedhat die eFlagge so etwas sed "${NUM}"'!d;s/^//e;q'würde auch funktionieren