Manchmal muss ich einen einzelnen Befehl ausführen, der sich in einem Shell-Skript befindet.
Ich weiß bereits, sed -n 'line_num p'
dass ich diese Zeile drucken kann. Aber wie kann ich diese ausgedruckte Zeile als Befehl ausführen?
bash
command-line
Zen
quelle
quelle
line_num
und setzen.p
Wennline_num
beispielsweise 123 lautet, können Sie dies tunsed -n 123p | bash
. Und wennsh
es reicht, dann verwenden Sie einfachsh
stattbash
.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) Systemensh
ist in der Regeldash
. Wenn das Skript für geschrieben wurdedash
(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:
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.
quelle
man history
history
ist eingebaut, daher ist es dokumentiert inhelp history
(oderman bash
, aber das ist viel Lesen). Wenn Sie das Obige zitieren,history -s
werden "die ARGs als einzelner Eintrag an die VerlaufslisteDu kannst tun...
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:
quelle
eval
.gnu sed
hat diee
Flagge so etwassed "${NUM}"'!d;s/^//e;q'
würde auch funktionierenBearbeiten Sie Ihr Skript mit vim (vi unter Linux)? Fügen Sie in vi eine Zuordnung hinzu:
und danach, wenn Sie in vi auf der interessanten Linie sind, drücken Sie F4
quelle
In bash können Sie den folgenden Befehl ausführen:
quelle