명령 대체: 파일 또는 명령을 찾을 수 없습니다.

명령 대체: 파일 또는 명령을 찾을 수 없습니다.

다음 스크립트

#!/bin/bash
QUERY='select * from cdr;'
MYROWS=$("sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db '${QUERY}'")

나에게주세요

./bla.sh: row 35: sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db 'select * from cdr;': file or directory not found

내가 직접 실행하면

sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db 'select * from cdr;'

그렇다면 괜찮습니다. 오류 메시지에 표시되지 않는 따옴표에 일부 오류가 있는 것 같습니다. 작은 따옴표가 필요합니다.

select * from cdr;

내가 뭘 잘못하고 있는지에 대한 힌트를 주셔서 감사합니다!

답변1

내부에는 $(…)일반적인 구문을 사용하는 쉘 명령이 있습니다. 명령으로 의도한 전체 조각을 큰따옴표로 묶으면 명령의 첫 번째 단어인 단일 단어로 구문 분석되므로 명령 이름으로 해석됩니다.

또한 인용이 $QUERY올바르지 않습니다. 변수를 확장하려면 큰따옴표가 필요합니다.

MYROWS=$(sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db "${QUERY}")

관련 정보