선택한 텍스트에 "-----BEGIN PGP MESSAGE----" 문자열이 나타나면 선택한 텍스트의 암호를 해독하고 싶습니다. 다음 코드가 있지만 아무것도 표시되지 않습니다.
#!/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
텍스트를 선택한 후 터미널에서 실행하면 다음과 같이 표시됩니다.
line 3: [grep: command not found
저는 bash 스크립팅을 처음 접했습니다. 어떤 도움이라도 주시면 감사하겠습니다.
감사합니다
답변1
혼란스럽게도 [
실제로는 프로그램이며 다음과 같이 알려져 있습니다.테스트 (1). grep 명령을 [
. 어떤 용도로 사용하려면 [
왼쪽 대괄호를 공백 문자로 구분해야 합니다.[ foo == bar ]
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.
당신이 원하는 명령은 아마도 이와 비슷할 것입니다.
if grep -q -e "-----BEGIN PGP MESSAGE-----" pgp.txt; then
...
...
fi
답변2
[ 뒤에는 공백이 있어야 합니다. 그리고 grep은 문자열을 반환하므로 테스트가 실패할 수 있습니다. grep의 종료 상태를 확인하는 것이 좋습니다.
grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt
exitcode=$?
if [ $exitcode ]
then
# not found
else
# found
fi
답변3
[
구문이 아니라 명령입니다. 명령 과 동일합니다 test
.
작동하는지 확인하려면 대괄호를 제거하세요.
#!/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
업데이트:
귀하의 경우에는 왼쪽 대괄호 뒤에 공백을 삽입해도 작동하지 않습니다.
if [ grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt ]
then
bash는 다음과 같이 확장하기 때문입니다.
if test grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt
then
오류 가 발생합니다 line 3: [: too many arguments
.
[
명령 이라는 것을 기억하세요 . 인수와 프로시저에 종료 코드를 사용합니다.
grep
다음을 사용하여 의 표준 출력을 삭제할 수도 있습니다 .
if grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt >/dev/null
then