간단한 bash 명령이라고 생각하는데 문제가 있습니다.
나는 기본적으로 여러 파일을 반복하여 이름을 얻고 싶습니다.
`ls ./*.sql` # list all files ending with .sql
if [ $? != 0 ] # make sure such files exist
then
echo "no such file"
else
echo "files exist"
fi
내가 달릴 때
"ls ./*.sql"
나는 내가 기대했던 것을 얻었다
./file01.sql ./file02.sql
하지만 bash 스크립트를 실행하면
./file01.sql: line 1: some random error
./file01.sql: line 2: some random error
./file01.sql: line 3: some random error
./file02.sql: line 1: some random error
./file02.sql: line 2: some random error
./file02.sql: line 3: some random error
왜 이것이 다른지 아는 사람이 있습니까?
답변1
뒤에 나오는 따옴표입니다. 실행할 명령의 출력을 쉘에 알려줍니다.
예를 들어
`echo ls`
실행할 수 있습니다 ls
.
귀하의 경우 bash에 sql 파일 실행을 요청했습니다. bash는 이것을 할 수 없고 SQL은 bash에 적합하지 않기 때문에 이것은 분명히 당신이 원하는 것이 아닙니다.
또한 이 수정 사항을 적용하더라도 스크립트는 설명된 대로 수행되지 않습니다. 다른 사람(Janis)도 이 문제를 해결하는 답변을 제공했지만 스크립트가 왜 그렇게 했는지 설명하지 않았습니다.
답변2
도착하다"여러 개의 [.sql] 파일을 만들고 해당 이름을 가져옵니다." 다음과 같이 하면 됩니다.
for f in *.sql
do
do_whatever_with_file "$f"
done
파일만 나열하려면 다음을 수행하세요.
ls *.sql
*.sql
파일이 존재 하는지 테스트하려면 다음과 같이 하십시오.
if ls *.sql >/dev/null 2>&1
then echo sql files existing
else echo no sql files
fi