* 파라메타 사용시 문제점 (3줄짜리 쉘스크립트)
글쓴이: wizardis / 작성시간: 수, 2010/06/09 - 6:12오후
test.sh (아래 3줄이 내용)
#!/bin/sh
fnameDefault="-name *.cpp"
find . \( ${fnameDefault} \) -type f
위의 스크립트 test.sh를 실행시킬때 만약 실행 폴더에 cpp파일이 있으면 에러가 납니다.
그 파일들이 *.cpp 대신에 치환이 되어 버려서 에러가 납니다.
실제로 console에서도 아래와 같이 하면 에러가 납니다.
find . -name *.cpp -type f
이 에러를 피하기 위해서는 ..
find . -name "*.cpp" -type f
이렇게 "" 으로 싸줘야 문제가 안생깁니다.
그럼 쉘스크립트 안에서는 어떻게 해줘야 동작이 제대로 될까요??
(당연한 얘기지만 fnameDefault 변수를 사용하여 작성해야 합니다.., 단순히 \" 로 하면 동작안됩니다.)
고수 선배님의 조언 부탁드립니다.~
Forums:
[bushi@rose ~]$ echo
OTL
답변 감사합니다만,.. 안됩니다..
님말씀대로면 아래처럼 하는것인데..
fnameDefault="-name \"*.cpp\""
이렇게 해서 스트립트를 돌려보면 동작하지 않네요.
실제로 동작시키는건 script 파일이니깐요, 그걸로 동작을 해야해서요..
..
...
제 환경에서는
제 환경에서는 알려주신 스크립트로도 잘 되는군요.
혹시 이렇게 하면 어떨까요?
#!/bin/sh
fnameDefault="-name *.cpp"
eval "find . \( ${fnameDefault} \) -type f"
-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.
안되네요 ㅠ_ㅠ
님의 환경에서는 제가 말씀드린 script로도 잘 된다고 하셨는데요,..
중요한것은 그 script를 실행시키는 폴더에 .cpp 파일이 두개이상 있는 경우에 제대로 동작을 안하는 경우 입니다.
즉 script를 실행한 자식 폴더에만 .cpp가 있는 경우는 정상 동작합니다.
혹시 실행해 보셨을때 실행폴더에 .cpp 파일이 두개 이상 있었는지요??
아무튼 답변 감사드립니다.
아
아 죄송합니다.
제대로 안 읽고 했네요. ㅡ,.ㅡㅋ
이렇게 하는건 안되나요?
#!/bin/sh
fnameDefault="-name \"*.cpp\""
eval "find . \( ${fnameDefault} \) -type f"
-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.
아하~ 잘되네요~
감사합니다. 잘 동작하네요
eval이 이런식으로도 쓰이는군요~ ^^
혹시나 해서
혹시나 해서 찾아봤더니 이런게 있었군요. ㅡ,.ㅡㅋ
http://www.gnu.org/software/bash/manual/bashref.html#Filename-Expansion
간단히 해결하려면 아래와 같이 하는게 제일 좋겠네요.
#!/bin/sh -f
아 물론 sh -> bash 인 경우만 되겠네요.
-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.
이방법이 젤 베스트인거 같네요~
말씀해주신 옵션으로 하니까 잘 되는군요
저런 문서도 좀 봤어야 하는데 ㅎㅎ;;;
참 그리고 sh, bash 이나 둘다 -f 옵션은 동작하는군요
감사합니다.
double quote 대신 single
double quote 대신 single qoute를 사용하시면 될 것 같은데요.
잘 안되네요
저도 ', `, ", 를 적당히 조합하여 해봤었는데 안되더라고요..
답변 감사합니다.
댓글 달기