있습니다 비슷한 질문은 당신이 예를 들어 대체 할 '포장'시나리오와 거래 cd
내장을 호출하는 명령 cd
.
그러나 shellshock et al과 bash가 환경에서 함수를 가져 오는 것을 알기 때문에 몇 가지 테스트를 수행했으며 cd
스크립트 에서 내장을 안전하게 호출하는 방법을 찾을 수 없습니다 .
이걸 고려하세요
cd() { echo "muahaha"; }
export -f cd
이 환경에서를 사용하여 호출 한 모든 스크립트 cd
가 중단됩니다 (와 같은 효과 고려 cd dir && rm -rf .
).
명령의 유형 (편의적으로 type
) 을 확인하는 명령 과 함수 ( builtin
및 command
)가 아닌 내장 버전을 실행하기위한 명령이 있습니다. 그러나 이것들은 함수를 사용하여 재정의 할 수 있습니다.
builtin() { "$@"; }
command() { "$@"; }
type() { echo "$1 is a shell builtin"; }
다음을 산출합니다 :
$ type cd
cd is a shell builtin
$ cd x
muahaha
$ builtin cd x
muahaha
$ command cd x
muahaha
bash가 내장 명령을 안전하게 사용하도록하거나 강제로 전체 환경을 지우지 않고 명령이 내장되지 않은 것을 감지하는 방법이 있습니까?
누군가가 환경을 제어하는 경우 어쨌든 망친 것일 수도 있지만 적어도 별칭의 경우 \
앞에 를 삽입하여 별칭을 호출하지 않는 옵션이 있습니다.
env
함수로 다시 정의되지 않은 경우에만 . 이것은 끔찍하다. 처음에는 특수 문자가 도움이 될 것이라고 생각했습니다 . 소스를 /
사용 .
하는 등의 전체 경로로 호출 하는 등. 그러나 이것들은 함수 이름에도 사용될 수 있습니다! 당신은 할 수 있습니다 당신이 원하는 모든 기능을 재정의하지만, 원래의 명령을 호출로 돌아 가야 어렵다.
#/bin/sh
기본 대화식 쉘이 아닌 경우 스크립트를 작성하십시오 .
env
과 같이 명령을 사용하여 스크립트를 실행할 수 있습니다 .env -i <SCRIPT.sh>