서브쉘에 기능을 전파하는 방법은 무엇입니까?

서브쉘에 기능을 전파하는 방법은 무엇입니까?

솔라리스/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

또한보십시오https://docstore.mik.ua/orelly/unix3/upt/ch29_13.htm

관련 정보