it-swarm.com.de

Fordern Sie den Benutzer immer auf, bevor Sie einen Befehl in der Shell ausführen

Gibt es ein Dienstprogramm, das den Benutzer immer zur Bestätigung auffordert, bevor ein Befehl ausgeführt wird, der der Frage nach dem Kennwort Sudo ähnelt?

8
m33lky

Möchten Sie, dass es funktioniert, ohne einen zusätzlichen Befehl einzugeben, z.

$ rm file

Oder nur, wenn der Benutzer so etwas eingibt

$ confirm rm file

Oder nur, wenn der Benutzer versucht, bestimmte Befehle auszuführen, z.

$ rm file

aber nicht für

$ echo "Hello"

Bei Option 1 kann dies mit dem Preexec-Hook in zsh oder der DEBUG-Trap in bash erfolgen.

Fügen Sie bei Option 2 so etwas in /etc/bash.bashrc oder eine andere Shell-Startdatei ein.

confirm() {
    echo -n "Do you want to run $*? [N/y] "
    read -N 1 REPLY
    echo
    if test "$REPLY" = "y" -o "$REPLY" = "Y"; then
        "[email protected]"
    else
        echo "Cancelled by user"
    fi
}

Bei Option 3 können Sie das confirm -Skript oben ändern, oder einige Befehle haben eine Option, die Sie fragen können, bevor Sie etwas tun, z. rm -i. Sie könnten alias rm='rm -i' in /etc/bash.bashrc einfügen.

8
Mikel

Ich habe ein bisschen mit Bash gespielt und einen Hack herausgefunden, durch den dies möglich gemacht werden könnte.

#!/bin/bash

debug_trap () {
    echo "executing $BASH_COMMAND"
    echo "Allow?"
    select choice in yes no
    do
        if [ "$choice" = "yes" ]
        then break
        Elif [ "$choice" = "no" ]
        then return 1
        fi
    done
}

shopt -s extdebug
trap debug_trap DEBUG

Sie können dieses Skript beispielsweise unter confirm-any-command.sh und source in Ihrem bashrc speichern. Es fordert Sie zur Bestätigung jedes Befehls auf, den Sie ausführen möchten.

Bitte beachten Sie, dass dies nichts weiter als ein Proof-of-Concept-Hack ist. Ich bezweifle, dass es in dieser Form wirklich nützlich sein kann. Wenn Sie jeden von Ihnen eingegebenen Befehl bestätigen müssen, werden Sie sich sehr bald angewöhnen, nach jedem Befehl automatisch "Ja" zu drücken. Ihre mentale Zuordnung für "Befehlsende" ändert sich von nur Enter zu Enter,yes,Enter - Sie werden es als Ganzes eingeben und nicht einmal versuchen, einige Zeit damit zu verbringen, zu überprüfen, ob Sie wirklich möchten, dass dieser Befehl ausgeführt wird. Dies ist kontraproduktiv und wird Ihnen nicht helfen.

10
ulidtko