변수 평가를 지연하는 방법(지연 평가)은 무엇입니까?

변수 평가를 지연하는 방법(지연 평가)은 무엇입니까?

예를 들어, 0,1,2,...32767이라는 이름의 32768개 디렉터리를 만들었습니다.

명령을 실행할 때마다 경로를 무작위로 선택하고 싶습니다.

$PATH그래서 으로 바꿨 는데 바로 평가가 되니까 $PATH:/blabla/$RANDOM작동이 안 되더라구요 .$RANDOM

평가를 어떻게 지연할 수 있나요?

답변1

이것은 일반적인 쉘의 기능이 아닙니다.

최신 버전ATT 크쉬셸에는 규율 함수라는 고유한 기능이 있습니다. 변수에 액세스할 때 사용자 정의 코드를 실행할 수 있으며, .sh.value다른 값으로 설정된 경우 변수 값 대신 해당 값을 사용할 수 있습니다.

function PATH.get { .sh.value=$PATH:/blabla/$RANDOM; }

그러나 이 기능도 변수가 셸 내부에서 사용될 때가 PATH아니라 스크립트에서 변수가 사용될 때만 트리거되기 때문에 도움이 되지 않습니다 .PATH

마지막 PATH 요소를 이와 같이 만들고 bash 또는 zsh를 사용하는 경우 "명령을 찾을 수 없음" 기능을 사용하여 명령을 찾을 수 없을 때 사용자 정의 코드를 호출할 수 있습니다. 배쉬에서:

command_not_found_handle () {
  command "/blabla/$RANDOM/$@"
}

zsh에서:

command_not_found_handler () {
  /blabla/$RANDOM/$1 "$@[2,$#]"
}

이러한 경우 외에는 어떤 쉘 기능도 도움이 될 수 없습니다. 어떤 경우에도 쉘에서 호출되지 않은 프로그램에는 쉘 기능이 도움이 될 수 없습니다.

당신이 사용할 수있는LD_PRELOAD씌우다execlp, execvp그리고execvpe라이브러리 함수는 콜론으로 구분된 부분을 나누고 PATH각 부분을 디렉터리로 해석하는 대신 다른 작업을 수행할 수 있습니다. 바라보다 실행 전 파일 설명자 리디렉션예를 들어 LD_PRELOAD.

또는 PATH 항목을 다음 위치에 배치할 수 있습니다.퓨즈파일 시스템은 주어진 경로가 변경 가능한 기본 디렉터리에 해당하도록 스택 파일 시스템을 구현합니다. 이는 execve각 PATH 요소 중 하나가 작동할 때까지 각 PATH 요소를 호출하는 프로그램에 대해 작동하지만 먼저 기존 실행 파일을 찾는 PATH 항목을 반복한 다음 발견된 파일을 실행하는 프로그램을 혼란스럽게 합니다.

관련 정보