금연 건강 증진 협회

금연 건강 증진 협회

명령줄 인수를 사용하여 아래 첨자를 호출/호출하는 bash 스크립트가 있습니다. 호출자와 동일한 PID에서 아래 첨자를 강제로 실행하려면 어떻게 해야 합니까?

답변1

또는 아래첨자를 얻으세요:

금연 건강 증진 협회

#!/bin/sh

echo one.sh: pid is "$$"
. ./two.sh
echo done with "$0"

(명령은 의 명령과 정확히 동일 .하지만 이식성이 더 뛰어납니다.)sourcebash.

2.sh

echo two.sh: pid is "$$"

실행 예시:

$ ./one.sh
one.sh: pid is 31290
two.sh: pid is 31290
done with ./one.sh

스크립트는 two.sh동일한 쉘 환경에서 실행되며 one.sh쉘은 스크립트를 실행하기 위해 새 프로세스를 생성하지 않습니다. 이는 쉘 함수를 호출하는 것과 매우 유사하게 작동하지만 여러 가지 방법으로 작동합니다(예: 이전에서 제어를 반환하는 return대신 사용 exit, 쉘 세션을 완전히 종료).two.shone.shexit

답변2

다른 명령을 실행할 필요가 없거나 아래 첨자를 호출한 후 다른 작업을 수행할 필요가 없으면 다음을 사용할 수 있습니다.

exec sub_script

이는 exec내장 셸이며 수행되는 작업은 다음과 같습니다.

$ help exec
exec: exec [-cl] [-a name] [command [arguments ...]] [redirection ...]
    Replace the shell with the given command.

    Execute COMMAND, replacing this shell with the specified program.
    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,
    any redirections take effect in the current shell.

    Options:
      -a name   pass NAME as the zeroth argument to COMMAND
      -c    execute COMMAND with an empty environment
      -l    place a dash in the zeroth argument to COMMAND

    If the command cannot be executed, a non-interactive shell exits, unless
    the shell option `execfail' is set.

    Exit Status:
    Returns success unless COMMAND is not found or a redirection error occurs.

따라서 이를 실행한 후에 exec sub_script는 상위 스크립트를 영구적으로 떠나고 다시 돌아갈 수 없습니다.

관련 정보