
일부 변수를 내보내고 마지막에 명령을 실행하는 fish 스크립트가 있습니다. 이 변수를 현재 셸 세션으로 가져오기 위해 이 파일을 소싱하고 싶지만 마지막에 명령을 실행하지 않고 싶습니다.
질문: 현재 파일이 실행되고 있는지, 아니면 파일 내에서 소싱되고 있는지 알 수 있나요?
답변1
환경 변수를 사용하여 $_
스크립트가 명령에 의해 "실행"되는지 확인할 수 있습니다 source
.
#!/bin/fish
if test "$_" = source
echo got sourced
else
echo was execed
end
답변2
환경 변수를 사용하여 $_
스크립트가 명령에 의해 "실행"되는지 확인할 수 있습니다 source
. 명령 에는 source
공통 별칭(" ")이 있으므로 및 둘 다에 대해 환경 변수를 .
확인해야 합니다 .$_
source
.
#!/bin/fish
if test "$_" != "source" -a "$_" != "."
echo "not sourced"
else
echo "was sourced"
end
이 스크립트의 일반적인 용도는 스크립트가 출처가 아닌 경우 사용자에게 경고를 보내는 것입니다.
if test "$_" != "source" -a "$_" != "."
echo "Run this script with \". ./activate.fish\" (aka: \"source ./activate.fish\")."
exit 1
end
activate.fish
물론 스크립트 이름으로 바꾸십시오 .
답변3
스크립트의 "소스"가 무엇인지 오해하고 계신 것 같습니다. 일반적으로 스크립트를 실행하면 별도의 프로세스에서 실행됩니다. 소싱하면 다음에서 실행됩니다.현재 쉘. 여전히 각 줄을 실행합니다.
아마도 당신이 원하는 것은 마지막 줄을 필터링하는 것입니다. 노력하다:
source (sed '$d' filename | psub)
이 psub
명령은 일부 프로세스의 출력을 마치 파일인 것처럼 처리하는 데 사용됩니다.선적 서류 비치