솔라리스/sh
다음을 통해 로드되는 파일에 일부 기능이 정의되어 있습니다.
. ./some_file.sh
서브쉘을 시작할 때
sh
내 함수 정의가 모두 손실되었지만 그렇게 하면
env
소스 코드를 보았습니다. 내 서브셸에서 작동하게 하는 쉬운 방법이 있습니까?
답변1
함수는 자연스럽게 다음으로 전파됩니다.서브쉘:
greet () {
echo "hello, $1"
}
( echo "this is a subshell"; greet bob )
그러나 이름으로 셸을 호출하여 시작되는 독립 셸 프로세스에는 전파되지 않으며 전파될 수도 없습니다.
Bash에는 환경을 통해 기능을 전달하는 확장 기능이 있습니다., 그러나 다른 쉘에는 그런 것이 없습니다. 이 기능을 시뮬레이션할 수 있지만 어쨌든 중첩된 셸에서 코드를 실행해야 합니다. 중첩된 쉘에서 함수 정의를 얻을 수도 있습니다.
답변2
기능을 전파할 수 있습니다.배쉬에서 배쉬까지서브쉘:
function greet1 {
echo "moin, $1"
}
typeset -fx greet1
greet2() {
echo "servus, $1"
}
typeset -fx greet2
echo "greet1 bob; greet2 alice" | bash
산출:
moin, bob
servus, alice