~에서https://unix.stackexchange.com/a/156010/674
위의 두 번째 항목은
sh
인라인 스크립트로 들어갑니다 . 셸 오류 메시지에 사용되는 빈 문자열 이 아닌$0
관련 항목(예:sh
orfind-sh
) 을 사용해야 합니다._
-
--
$ find . -name accept_ra -exec sh -c 'echo 0 > "$1"' inline-sh {} \; inline-sh: ./accept_ra: Permission denied
_
" -
, --
또는 쉘 오류 메시지의 빈 문자열"은 무엇을 의미합니까?
또는 빈 문자열이 아니기 때문에 inline-sh
예제에서 work를 사용하지 않는 이유는 무엇입니까?inline-sh
_
-
--
감사해요.
답변1
"쉘에 대한 오류 메시지"의 제목은 " $0
"이 아니거나 "가 아니 거나 _
빈 문자열"입니다. 주어진 값은 오류 메시지에 사용되므로 이에 대해 의미 없는 값을 지정하면 안 됩니다. 그렇지 않으면 이상한 오류 메시지가 표시됩니다. 이게 더 말이 될 수도 있겠네요-
--
$0
$0
위의 두 번째 항목은
sh
인라인 스크립트로 들어갑니다 . 와 같은 항목 이나 빈 문자열이 아닌$0
관련 항목(예:sh
orfind-sh
) 을 사용해야 합니다 . 왜냐하면 in 의 값이 셸의 오류 메시지에 사용되기 때문입니다._
-
--
$0
inline-sh
하다예제에서 작업하기: 예제의 초점인 오류 메시지에 사용됩니다.
답변2
$ find . -name accept_ra -exec sh -c 'echo 0 > "$1"' inline-sh {} \;
inline-sh: ./accept_ra: Permission denied
오류 메시지는 파일을 inline-sh
열 수 없다는 것을 알려줍니다 ./accept_ra
.
$ find . -name accept_ra -exec sh -c 'echo 0 > "$1"' _ {} \;
_: ./accept_ra: Permission denied
$ find . -name accept_ra -exec sh -c 'echo 0 > "$1"' '' {} \;
: ./accept_ra: Permission denied
파일을 열지 못하는 정확한 이유가 무엇인지 사용자에게 덜 명확하고 더 혼란스럽게 만듭니다 ./accept_ra
.
따라서 이후의 첫 번째 매개변수에는 의미 있는 값을 사용하는 것이 좋습니다 sh -c 'code'
. 일반적으로 명령 이름을 반복하면 작동합니다. 에서와 같이
sh -c 'code using "$@"' sh actual arguments to the inline script