나는 다른 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
tcsh
argv()
명령에 매개변수를 제공하고 또는 를 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