다른 쉘에서 스크립트 코드(변수 설정)를 얻는 방법은 무엇입니까?

다른 쉘에서 스크립트 코드(변수 설정)를 얻는 방법은 무엇입니까?

FreeBSD를 사용해 보았습니다. FreeBSD 사용자를 위해 기본적으로 root사용됩니다 .csh

user@freebsd-13:~ $ echo $SHELL
/bin/csh

$()에서 변수를 설정해 보면 알 수 있습니다 csh.

root@freebsd-13:~ # export test=$(echo hello3)
Illegal variable name.

나도 그런 걸 하고 싶어

root@freebsd-13:~ # sh -c "export test=$(echo hello3)"
Illegal variable name.
root@freebsd-13:~ #

그것도 작동하지 않습니다... 그러나 이것은 다음과 같습니다:

root@freebsd-13:~ # sh -c "echo "hello""
hello

또는 이 방법도 작동하지만 범위는 다음과 같습니다 sh.

root@freebsd-13:~ # sh
# export test=$(echo hello3)
# echo $test
hello3
# exit
root@freebsd-13:~ # echo $test
test: Undefined variable.
root@freebsd-13:~ #

또 다른 시도는 다음을 통해 변수를 설정하는 것입니다 sh.

root@freebsd-13:~ # sh -c "export test=`echo hello5`"
root@freebsd-13:~ # echo $test
test: Undefined variable.
root@freebsd-13:~ # sh -c "echo "$test""
test: Undefined variable.
root@freebsd-13:~ #
root@freebsd-13:~ # /bin/sh -c "export test=`echo hello3`"
root@freebsd-13:~ # echo $test
test: Undefined variable.
root@freebsd-13:~ # /bin/sh -c "echo "$test""
test: Undefined variable.
root@freebsd-13:~ #

소스를 얻으십시오.

root@freebsd-13:~ # . sh -c "export test=$(echo hello3)"
Illegal variable name.
root@freebsd-13:~ #
root@freebsd-13:~ # . sh -c "export test=`echo hello3`"
.: Command not found.
root@freebsd-13:~ #
root@freebsd-13:~ # source sh -c "export test=`echo hello3`"
sh: No such file or directory.
root@freebsd-13:~ #
root@freebsd-13:~ # source /bin/sh -c "export test=`echo hello3`"
Unmatched '"'.
root@freebsd-13:~ # source /bin/sh -c "export test=$(echo hello3)"
Illegal variable name.
root@freebsd-13:~ #
root@freebsd-13:~ # source /bin/sh -c "export test="$(echo hello3)""
Illegal variable name.
root@freebsd-13:~ #

올바르게 수행하는 방법은 무엇입니까?

답변1

알겠습니다. 제 질문에 답하겠습니다.
첫째, 이 source명령은 파일에만 작동합니다.
내가 설명한 대로 코드를 실행하려면 다음과 같이 매우 명확한 설명을 사용해야 합니다 eval.

파일 대신 쉘 코드를 어떻게 얻을 수 있나요?

내가 이해하는 핵심은 소싱할 때 파일이 실행되지 않기 때문에 shebang 라인이 무시되고 해당 내용만 실행된다는 것입니다.

여기서 문제는 변수를 내보내려면 현재 셸에서 실행해야 한다는 것입니다. 현재 쉘은 소싱할 때 모든 셔뱅을 무시하며, 추가적으로 실행하는 경우에도 sh -c하위 쉘에서 코드를 실행합니다.

csh구문이 지원되지 않습니다 sh. 따라서 변수를 사용하는 동안 변수를 내보내는 유일한 방법은 csh해당 구문을 사용하는 것입니다.

root@freebsd-13:~ # setenv test `echo "hello world"`
root@freebsd-13:~ # echo $test
hello world

여기에 설명된 것과 유사한 몇 가지 다른 해결 방법이 있습니다.https://stackoverflow.com/questions/2710790/how-to-source-a-csh-script-in-bash-to-set-the-environment

(그러나 그 반대의 경우도 필요합니다 - csh 환경에서 bash 스크립트를 얻으십시오)

관련 정보