fish: sudo: !!: Befehl nicht gefunden

8

Ich habe Fisch in meinem Linux Mint DE installiert. Ich mag es wirklich, wie Fisch die Dinge einfacher macht und es so hübsch aussieht, obwohl ich keine richtige Antwort darauf finde, warum ich nicht ausführen kann:

sudo: !!: command not found

Zuerst habe ich versucht, den Ausrufezeichen mit sudo zu entkommen !! hat aber auch nicht funktioniert. Weiß jemand, warum dies fehlschlägt?

VaTo
quelle
Siehe auch superuser.com/q/719531/4714
glenn jackman

Antworten:

10

Ich habe !!in Fish keinen eingebauten Ersatz gefunden, aber Sie können eine Funktion schreiben, mit der Sie sie weiter verwenden können!!

Entnommen aus dieser Antwort https://superuser.com/a/719538/226822

function sudo --description "Replacement for Bash 'sudo !!' command to run last command using sudo."
    if test "$argv" = !!
    eval command sudo $history[1]
else
    command sudo $argv
    end
end
Nathaniel
quelle
Schöne Antwort, aber wo muss ich es schreiben, damit ich die Funktion dauerhaft machen kann?
VaTo
Sie haben zwei Möglichkeiten: .config / fish / config.fish oder wenn Sie die Dinge getrennt halten möchten, legen Sie sie in einzelne Dateien unter .config / fish / functions / newfunction1.fish newfunction2.fish usw.
Nathaniel
@vato In dieser Dose würden Sie den obigen Code in ~ / .config / fish / functions / sudo.fish speichern. Der Name der Datei sollte mit der darin enthaltenen Funktion übereinstimmen.
frederickjh
9

Die !!Syntax ist Teil der Funktion zum Ersetzen des Bash-Verlaufs, die fish nicht implementiert. Siehe diesen Link für eine Diskussion. Bitte zögern Sie nicht, darüber nachzudenken, was Fisch Ihrer Meinung nach tun sollte.

Der effizienteste (in Bezug auf Tastendrücke) Ersatz für sudo !!ist der Aufwärtspfeil, um das letzte Verlaufselement abzurufen. Strg-A, um zum Zeilenanfang zu gelangen, und geben Sie dann sudo ein.

lächerlich_fisch
quelle
Ok danke für die Klarstellung. Obwohl, um sudo mit dem letzten Befehl auszuführen, indem Sie die Geschichte durchgehen und dann Strg + A nicht ausschließlich von Fischen stammt, funktioniert bash im Grunde so.
VaTo
4
@SaulOrtega er behauptete nicht, es sei ausschließlich von Fisch, nur dass diese Methode bei Fischen funktioniert, während dies nicht der Fall ist !!.
Casey
Oder noch besser, verwenden , Ctrl+Pum das zu bekommen p revious Befehl und dann Ctrl+Aan den Anfang der Zeile zu gehen. Um All-In zu gehen, verwenden Sie Ctrl/Alt + B( B ackward) zusammen mit Ctrl/Alt + F( F orward), um die Pfeiltasten vollständig Ctrl+Ezu ersetzen , zu ersetzen Homeund Ctrl+Hzusammen mit Ctrl+Wzu ersetzen Backspace. Diese Verknüpfungen funktionieren in allen Shells und auch im Einfügemodus von vim .
Ossbuntu
1

Wenn Sie !!nur im Kontext von verwenden sudo !!, können Sie eine Tastenkombination für ^s(STRG + s) definieren, die Ihrem Befehl sudo voranstellt:

function prepend_command
  set -l prepend $argv[1]
  if test -z "$prepend"
    echo "prepend_command needs one argument."
    return 1
  end

  set -l cmd (commandline)
  if test -z "$cmd"
    commandline -r $history[1]
  end

  set -l old_cursor (commandline -C)
  commandline -C 0
  commandline -i "$prepend "
  commandline -C (math $old_cursor + (echo $prepend | wc -c))
end

Dies ermöglicht es, einen beliebigen Befehl einzugeben und sudo während der Eingabe oder in Ihrem Fall als Ersatz für sudo voranzustellen sudo !!

Siehe den Kommentar von Ahti zur Github-Diskussion

Orzechow
quelle
0

@ lächerliche_fischs Antwort ist veraltet. Der schnellste Weg, um das Äquivalent zu zu erreichen, sudo !!wäre Ctrl+ p/ up-arrow(je nachdem, was Sie bevorzugen) und dann Alt+, sum dem Befehl das Präfix zu geben sudo.

rien333
quelle