Antworten:
Versuchen Sie diesen Kerl =):
sed -n 'line_num p' | bash
oder
"$(sed -n 'line_num p')"
line_num
und setzen. p
Wenn line_num
beispielsweise 123 lautet, können Sie dies tun sed -n 123p | bash
. Und wenn sh
es reicht, dann verwenden Sie einfach sh
statt bash
.
sed -n 'line_num p' | sh
also eine andere Lösung sein? Ist dieser mehr Kompatibilität?
sh
tatsächlich ist. Auf Debian (und abgeleiteten) Systemen sh
ist 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, bash
dann fast definitiv nicht.
history
und 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
history
ist eingebaut, daher ist es dokumentiert in help history
(oder man bash
, aber das ist viel Lesen). Wenn Sie das Obige zitieren, history -s
werden "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 $NUM
Zeile aus Ihrem Skript in der Shell-Variablen abgerufen $line
und 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 sed
hat die e
Flagge so etwas sed "${NUM}"'!d;s/^//e;q'
würde auch funktionieren