Einfaches Szenario: Ich suche nach einer wsdl
Datei, die mitten in einem Projekt verloren gegangen ist.
$ find -name '*.wsdl'
./some/very/very/long/way/to/some/lost/directory/filename.wsdl
Jetzt, da ich weiß, wo es ist, möchte ich etwas mit dieser Datei machen, sagen wir, sie bearbeiten. Ist es möglich, anstatt den Pfad hinter meinem Befehl zu kopieren / einzufügen, den zuvor zurückgegebenen Pfad zu verwenden find
? Genauso wie es möglich ist, auf das letzte Argument zuzugreifen, mit dem Sie geschrieben haben, !$
oder auf den letzten Befehl, mit dem Sie geschrieben haben !!
.
Ich habe gelesen, dass es mit möglich war $?
, aber es gibt mir nur einen Fehler zurück:0: command not found
$ echo $?
0: command not found
Antworten:
Führen Sie den Befehl in der Befehlsersetzung aus:
Die Ausgabe wird nun in der
output
Variablen gespeichert , die Sie beliebig oft verwenden können.quelle
$?
enthält keine Pfade.return
in der Frage verwirrt . Ihre Antwort ist absolut richtig für die obige Frage.$?
Enthält den Ausgangsstatus des letzten BefehlsDafür gibt es keine spezielle Bash-Variable.
$?
Enthält den Exit-Code des letzten Befehls (0 = Erfolg,> 0 = Fehlercode)Sie können die Ausgabe von
find
mit dem-exec
Flag wie folgt verwenden:Das
{}
wird durch den Dateinamen ersetzt, der von gefunden wirdfind
. Dies würde den Befehl für jede gefundene Datei ausführen. Wenn Sie einen Befehl mit allen gefundenen Dateien als Argumente ausführen möchten, verwenden Sie+
am Ende Folgendes:Dies würde eine emacs-Instanz mit allen gefundenen .wsdl-Dateien öffnen, die darin geöffnet sind.
Eine allgemeinere Lösung besteht darin, die Ausgabe in einer Variablen zu speichern:
Dies funktioniert bei allen Befehlen, nicht nur beim Finden. Sie können aber auch Folgendes verwenden
xargs
:quelle
$?
, den Exit-Code eines anderen Befehls zurückzugeben? zB ping 1.1.1.1 -w 10; $ zurückgeben?$?
Enthält den Exit-Code des vorherigen Befehls. Die Antwort lautet also ja.Hier ist ein kurzer Hack, der mit minimalen Tastenanschlägen tun sollte, was Sie wollen, wenn es Ihnen nichts ausmacht, dass der letzte Befehl zweimal ausgeführt wird.
Verwenden Sie backtick, unter anderem:
`!!`
z.B
* edit: Ich sehe, dass die oben verlinkte "möglicherweise betrogene" Frage auch diese Antwort enthält. immer noch direkt relevant für diesen, also lass es, aber entschuldige den Betrug.
quelle
git br | grep
in meinem Fall über gefunden habe)!!
so viel einfacher als das Drücken der Aufwärtstaste? Und dann können Sie immer noch Ihren Befehl sehen. Wenn es akzeptabel ist, den Befehl erneut auszuführen, ist das Drücken genauso einfach (und ein bisschen verständlicher und transparenter)