있습니다 비슷한 질문은 당신이 예를 들어 대체 할 '포장'시나리오와 거래 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>