다른 tcsh 스크립트에서 시작된 tcsh 스크립트에서 $_를 어떻게 올바르게 사용합니까?

다른 tcsh 스크립트에서 시작된 tcsh 스크립트에서 $_를 어떻게 올바르게 사용합니까?

나는 다른 tcsh 스크립트 자체에서 비롯된 tcsh 스크립트 내부에서 결과를 검색하려고 합니다 $_(각각 내부 스크립트와 외부 스크립트라고 부르겠습니다). 그러나 $_내가 예상한 값(즉, 마지막으로 실행된 명령)이 설정되지 않았습니다.

외부 코드:

#!/usr/bin/tcsh

set lastCmd0 = ($_)
echo "${lastCmd0}"
echo "$0"
source inner
echo "enOuter"

내부 코드:

#!/usr/bin/tcsh

set lastCmd1 = ($_)
echo "${lastCmd1}"
echo "$0"
echo "endInner"

호출 시 출력은 다음과 같습니다 source outer.

source outer 
tcsh
source outer 
tcsh
endInner
enOuter

질문 1왜 두 개는 있는데 source outer두 번째는 없어야 합니까 source inner?

호출 시 출력은 다음과 같습니다 ./outer.

./outer

./outer
endInner
enOuter

질문 2내부구매시 왜 $_설정이 없나요?

스크립트를 실행할 때 $_절대 설정되지 않는 것 같은데 , 이것이 정상인지는 모르겠습니다. 어쨌든, 그래도 작동하지 않으면 $_스크립트 내에서 마지막 명령을 실행하는 다른 안전한 방법이 있습니까?

답변1

tcshargv()명령에 매개변수를 제공하고 또는 를 source변경하지 않은 경우 $0의 항목을 업데이트할 수 있습니다 $_.

인쇄되는 변수와 이를 수행하는 스크립트를 표시하도록 메시지를 변경하면 무슨 일이 일어나고 있는지 확인할 수 있습니다. 첫 번째 "외부":

#!/usr/bin/tcsh

set lastCmd0 = ($_)
echo 'O:$lastCmd0'"=${lastCmd0}"
echo 'O:$0'"=$0"
source inner
echo 'O:endOuter'

그 다음은 '내부'

#!/usr/bin/tcsh

set lastCmd1 = ($_)
echo 'I:$lastCmd1='"${lastCmd1}"
echo 'I:$0'"=$0"
echo 'I:endInner'

산출:

> tcsh -f
> source ./outer
O:$lastCmd0=source ./outer 
O:$0=tcsh
I:$lastCmd1=source ./outer 
I:$0=tcsh
I:endInner
O:endOuter

그리고

> source ./outer first second
#argv: 2
O:$lastCmd0=source ./outer first second 
O:$0=tcsh
I:$lastCmd1=source ./outer first second 
I:$0=tcsh
I:endInner
O:endOuter

관련 정보