Desejo descriptografar o texto selecionado se a string "-----BEGIN PGP MESSAGE-----" ocorrer no texto selecionado. Eu tenho o seguinte código, mas não aparece 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
Quando executo no terminal depois de selecionar um texto, ele diz
line 3: [grep: command not found
Eu sou novo em scripts bash. Qualquer ajuda seria apreciada.
Obrigado
Responder1
Confusamente, [
é na verdade um programa, também é conhecido comoteste (1). Você não precisa colocar seu comando grep em um arquivo [
. Se você fosse usar [
para algo, você precisa separar o colchete esquerdo com um caractere de espaço[ foo == bar ]
A sintaxe if é: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.
O comando que você deseja é provavelmente mais parecido com este.
if grep -q -e "-----BEGIN PGP MESSAGE-----" pgp.txt; then
...
...
fi
Responder2
Deve haver um espaço após [. E grep retorna strings para que seu teste possa falhar. É melhor você verificar o status de saída do grep.
grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt
exitcode=$?
if [ $exitcode ]
then
# not found
else
# found
fi
Responder3
[
é um comando, não uma sintaxe. É equivalente ao test
comando.
Remova os colchetes para ver se 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
ATUALIZAR:
Inserir um espaço após o colchete esquerdo também não funciona no seu caso:
if [ grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt ]
then
porque o bash o expande como:
if test grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt
then
e você receberá o line 3: [: too many arguments
erro.
Lembre-se de que isso [
é um comando. São necessários argumentos e procedimentos e um código de saída.
Você também pode descartar a saída padrão grep
usando:
if grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt >/dev/null
then