Ich möchte den ausgewählten Text entschlüsseln, wenn die Zeichenfolge „-----BEGIN PGP MESSAGE-----“ im ausgewählten Text vorkommt. Ich habe den folgenden Code, aber er zeigt nichts an.
#!/bin/bash
xsel > pgp.txt
if [grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt]
then
gnome-terminal --command "gpg -d -o decrypted.txt pgp.txt"
gedit decrypted.txt
fi
Wenn ich es auf dem Terminal ausführe, nachdem ich einen Text ausgewählt habe, heißt es
line 3: [grep: command not found
Ich bin neu im Bash-Scripting. Für jede Hilfe wäre ich dankbar.
Danke
Antwort1
Verwirrenderweise [
ist es eigentlich ein Programm, es ist auch bekannt alsPrüfung (1). Sie müssen Ihren grep-Befehl nicht in ein einschließen [
. Wenn Sie für etwas verwenden möchten, [
müssen Sie die linke Klammer mit einem Leerzeichen trennen[ foo == bar ]
Die if-Syntax lautet:help if
if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi
The `if COMMANDS' list is executed. If its exit status is zero, then the
`then COMMANDS' list is executed.
Der gewünschte Befehl sieht wahrscheinlich eher so aus.
if grep -q -e "-----BEGIN PGP MESSAGE-----" pgp.txt; then
...
...
fi
Antwort2
Nach [ sollte ein Leerzeichen stehen. Und grep gibt Zeichenfolgen zurück, sodass Ihr Test fehlschlagen könnte. Überprüfen Sie besser den Beendigungsstatus von grep.
grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt
exitcode=$?
if [ $exitcode ]
then
# not found
else
# found
fi
Antwort3
[
ist ein Befehl, keine Syntax. Es entspricht dem test
Befehl.
Entfernen Sie die eckigen Klammern, um zu sehen, ob es funktioniert:
#!/bin/bash
xsel > pgp.txt
if grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt
then
gnome-terminal --command "gpg -d -o decrypted.txt pgp.txt"
gedit decrypted.txt
fi
AKTUALISIEREN:
Auch das Einfügen eines Leerzeichens nach der linken Klammer funktioniert in Deinem Fall nicht:
if [ grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt ]
then
weil Bash es wie folgt erweitert:
if test grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt
then
und Sie erhalten den line 3: [: too many arguments
Fehler.
Denken Sie daran, dass es [
sich um einen Befehl handelt. Er benötigt Argumente und Prozeduren und einen Exit-Code.
Sie können die Standardausgabe auch verwerfen, grep
indem Sie Folgendes verwenden:
if grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt >/dev/null
then