
Manchmal vergesse ich meine relativen Pfade und bis ich herausgefunden habe, wo sich die Datei befindet, habe ich Folgendes eingegeben:
Cris-Mac-Book-2:weird cris$ ls ../../../
Icon? Research Support
Cris-Mac-Book-2:weird cris$ ls ../../../Support
Fourganizical PicoCryptical SupportPlan.txt
MoneyProjectical Qwontical Testcomms
OSICAL StanTechStatistical todo
Cris-Mac-Book-2:weird cris$ ls ../../../Support/PicoCryptical
S cs mini php py readme
Cris-Mac-Book-2:weird cris$ ls ../../../Support/PicoCryptical/py/StanTechPico.py
Um dieses Skript jetzt auszuführen, drücke ich, ←bis ich wieder zum Anfang des Befehls gelange, und ersetze es dann python
durch ls
.
Wenn ich diese lange Pause mache ←(was oft vorkommt), denke ich immer:Es muss eine schnellere Möglichkeit geben, die Befehlszeichenfolge zu bearbeiten oder die Ausgabe des vorherigen Befehls auszuführen.
Da ich nicht wirklich als Bash-Superuser qualifiziert bin, habe ich versucht,Rohrdie Ausgabe von ls an Python, die nicht wie beabsichtigt funktionierte:
Cris-Mac-Book-2:weird cris$ ls ../../../Support/PicoCryptical/py/StanTechPico.py | python
File "<stdin>", line 1
../../../Support/PicoCryptical/py/StanTechPico.py
^
SyntaxError: invalid syntax
Cris-Mac-Book-2:weird cris$
Meine Frage lautet also: Wie kann ich die STDOUT
Ausgabe eines vorherigen Befehls an die Argumentposition eines neuen Befehls einfügen?
Antwort1
^ls^python
wird Ihren unmittelbaren Bedarf decken (vorherigen Befehl wiederholen und python
ersetzen ls
)
Antwort2
Ich bin nicht sicher, ob Sie das wirklich fragen
Aber was ich wirklich möchte, ist wohl zu wissen, wie man die STDOUT-Ausgabe eines Befehls von der Befehlszeile aus an die Argumentposition eines anderen Befehls setzt.
Ich denke, was Sie nützlich finden könnten, ist die Verwendung$_
$ ls /tmp/long/path/which/contains/file
/tmp/long/path/which/contains/file
$ python $_
Dies $_
wird durch das letzte Argument des zuvor ausgeführten Befehls ersetzt.
Sehenhttp://tldp.org/LDP/abs/html/internalvariables.html
Wenn Sie jedoch wirklich die Standardausgabe als Argument für einen anderen Befehl verwenden möchten, können Sie xargs
dafür verwenden (siehehttp://linux.die.net/man/1/xargs)
$ ls /tmp/long/path/which/contains/file | xargs python
Antwort3
Haben Sie schon einmal Backticks verwendet?
python `ls ../../../somefile`
python
Wird mit der Ausgabe von ls
als Argument aufgerufen .
Allerdings bin ich nicht ganz sicher, ob Sie das wirklich fragen.
Antwort4
Abgesehen von Andrews Antwort gibt es einen guten Trick: Mit Ctrl+ aspringt der Cursor an den Zeilenanfang.