Quiero descifrar el texto seleccionado si la cadena "-----BEGIN PGP MESSAGE-----" aparece en el texto seleccionado. Tengo el siguiente código pero no me muestra nada.
#!/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
Cuando lo ejecuto en la terminal después de seleccionar un texto, dice
line 3: [grep: command not found
Soy nuevo en las secuencias de comandos bash. Cualquier ayuda sería apreciada.
Gracias
Respuesta1
Confusamente, [
es en realidad un programa, también se lo conoce comoprueba (1). No es necesario incluir el comando grep en un archivo [
. Si ibas a utilizar [
para algo necesitas separar el corchete izquierdo con un carácter de espacio.[ foo == bar ]
La sintaxis if es: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.
El comando que desea probablemente sea más parecido a este.
if grep -q -e "-----BEGIN PGP MESSAGE-----" pgp.txt; then
...
...
fi
Respuesta2
Debería haber un espacio después de [. Y grep devuelve cadenas para que su prueba pueda fallar. Será mejor que verifiques el estado de salida de grep.
grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt
exitcode=$?
if [ $exitcode ]
then
# not found
else
# found
fi
Respuesta3
[
Es un comando, no una sintaxis. Es equivalente al test
comando.
Retire los corchetes para ver si funciona:
#!/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
ACTUALIZAR:
Insertar un espacio después del corchete izquierdo tampoco funciona en su caso:
if [ grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt ]
then
porque bash lo expande como:
if test grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt
then
y obtendrás el line 3: [: too many arguments
error.
Recuerda que [
es un comando. Se necesitan argumentos y procedimientos y un código de salida.
También puedes descartar la salida estándar de grep
usando:
if grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt >/dev/null
then