셸: 다른 셸 스크립트에서 셸 스크립트를 호출하려면 어떻게 해야 합니까?
의 셸 스크립트가 .「 」a.sh ★★★★★★★★★★★★★★★★★」b.sh.
전화할 수 있나요?b.sh의 " " " 에서a.sh
여기에는 몇 가지 다른 방법이 있습니다.
다른 스크립트를 실행 가능한 상태로 만듭니다.
chmod a+x /path/to/file(Nathan Lilienthal's comment), 를 추가합니다.#!/bin/bash에 있는 행이라고 불립니다)과 shebang에$PATH환경 변수입니다.라고 할 수 .또는 명령어를 사용하여 호출할 수도 있습니다(이 명령어의 에일리어스입니다).
.는 이렇게 말합니다source /path/to/script또는 다음과 같은 명령어를 사용하여 실행할 수 있습니다.
/bin/bash /path/to/script
첫 번째 및 세 번째 접근 방식은 스크립트를 다른 프로세스로 실행하므로 다른 스크립트의 변수 및 함수에 액세스할 수 없습니다.
두 번째 접근법은 첫 번째 스크립트의 프로세스에서 스크립트를 실행하고 다른 스크립트에서 변수와 함수를 가져옵니다(따라서 호출 스크립트에서 사용할 수 있습니다).
에서는, 「」를 사용하고 있는 .exit두 번째 스크립트에서는 첫 번째 스크립트도 종료됩니다.첫 번째와 세 번째 방법에서는 일어나지 않을 것입니다.
이것 좀 봐.
#!/bin/bash
echo "This script is about to run another script."
sh ./script.sh
echo "This script has just run another script."
여기에는 몇 가지 방법이 있습니다.스크립트를 실행할 터미널:
#!/bin/bash
SCRIPT_PATH="/path/to/script.sh"
# Here you execute your script
"$SCRIPT_PATH"
# or
. "$SCRIPT_PATH"
# or
source "$SCRIPT_PATH"
# or
bash "$SCRIPT_PATH"
# or
eval '"$SCRIPT_PATH"'
# or
OUTPUT=$("$SCRIPT_PATH")
echo $OUTPUT
# or
OUTPUT=`"$SCRIPT_PATH"`
echo $OUTPUT
# or
("$SCRIPT_PATH")
# or
(exec "$SCRIPT_PATH")
이 모든 것은 공백이 있는 경로에 대해 올바른 것입니다!!!
내가 찾던 답은:
( exec "path/to/script" )
바와 같이, 「 」exec는 새로운 프로세스를 작성하지 않고 셸을 바꿉니다.단, 서브셸로 정리할 수 있습니다.패런치를 사용하여 할 수 있습니다.
: 사실 ★★★★★★★★★★★★*( "path/to/script" )분합니니다다
같은 디렉토리에 다른 파일이 있는 경우는, 다음의 어느쪽인가를 실행할 수 있습니다.
bash another_script.sh
또는
source another_script.sh
또는
. another_script.sh
「 」를 사용하는 bashsource스크립트는 부모 스크립트의 환경을 변경할 수 없습니다..이며 "POSIX"는source는 ""와 "bash"의 더 쉬운 입니다...source에 걸쳐서.스크립트가 다른 곳에 있는 경우 해당 스크립트에 대한 경로를 제공하십시오.상대 경로와 전체 경로 모두 작동해야 합니다.
우우 르"... 를 로드하여 " "를 사용할 수 .source myshellfile.sh당신의 코드에 따라.§:
#!/bin/bash
set -x
echo "This is an example of run another INTO this session."
source my_lib_of_variables_and_functions.sh
echo "The function internal_function() is defined into my lib."
returned_value=internal_function()
echo $this_is_an_internal_variable
set +x
파일을 실행하고 싶을 뿐이고, 그 결과만 흥미로운 경우 다음을 수행할 수 있습니다.
#!/bin/bash
set -x
./executing_only.sh
bash i_can_execute_this_way_too.sh
bash or_this_way.sh
set +x
하시면 됩니다./bin/sh( 스크립트를 ) 실제 스크립트를 통해)
# cat showdate.sh
#!/bin/bash
echo "Date is: `date`"
# cat mainscript.sh
#!/bin/bash
echo "You are login as: `whoami`"
echo "`/bin/sh ./showdate.sh`" # exact path for the script file
출력은 다음과 같습니다.
# ./mainscript.sh
You are login as: root
Date is: Thu Oct 17 02:56:36 EDT 2013
먼저 호출할 파일을 포함해야 합니다.
#!/bin/bash
. includes/included_file.sh
그러면 다음과 같이 함수를 호출할 수 있습니다.
#!/bin/bash
my_called_function
간단한 소스가 도움이 됩니다.Ex의 경우
#!/bin/bash
echo "My shell_1"
source my_script1.sh
echo "Back in shell_1"
스크립트를 실행하기 위해 단말기에 입력한 내용을 줄에 추가하기만 하면 됩니다.
설명:
#!bin/bash
./myscript.sh &
실행할 스크립트가 같은 디렉토리에 없는 경우 스크립트의 전체 경로를 사용합니다.
§:'/home/user/script-directory/.myscript. sh & sh &
이것은 나에게 효과가 있었고, 이것은 다른 하나를 실행하는 메인 sh 스크립트의 내용이었다.
#!/bin/bash
source /path/to/other.sh
은 음음음음음 the 、 음 、 상 、 을 、 안 、 the 、 the 、 the 、 the 、 the 、 the adding 。#!/bin/bash호출되는 서브스크립트의 첫 번째 줄에 연결합니다.그러나 shebang을 추가하더라도 서브셸에서 스크립트를 실행하여 출력을 캡처하는 것이 훨씬* 빠릅니다.
$(source SCRIPT_NAME)
이는 동일한 인터프리터(예를 들어 bash 스크립트에서 다른 bash 스크립트로)를 계속 실행하고 서브스크립트의 shebang 행이 실행되지 않도록 하는 경우에 작동합니다.
예를 들어 다음과 같습니다.
#!/bin/bash
SUB_SCRIPT=$(mktemp)
echo "#!/bin/bash" > $SUB_SCRIPT
echo 'echo $1' >> $SUB_SCRIPT
chmod +x $SUB_SCRIPT
if [[ $1 == "--source" ]]; then
for X in $(seq 100); do
MODE=$(source $SUB_SCRIPT "source on")
done
else
for X in $(seq 100); do
MODE=$($SUB_SCRIPT "source off")
done
fi
echo $MODE
rm $SUB_SCRIPT
출력:
~ ❯❯❯ time ./test.sh
source off
./test.sh 0.15s user 0.16s system 87% cpu 0.360 total
~ ❯❯❯ time ./test.sh --source
source on
./test.sh --source 0.05s user 0.06s system 95% cpu 0.114 total
* 예를 들어 바이러스 또는 보안 도구가 장치에서 실행 중인 경우 새 프로세스를 실행하는 데 100ms가 더 걸릴 수 있습니다.
pathToShell="/home/praveen/"
chmod a+x $pathToShell"myShell.sh"
sh $pathToShell"myShell.sh"
#!/bin/bash
# Here you define the absolute path of your script
scriptPath="/home/user/pathScript/"
# Name of your script
scriptName="myscript.sh"
# Here you execute your script
$scriptPath/$scriptName
# Result of script execution
result=$?
chmod a+x /path/to/file-to-be-executed
실행할 실행 (적어도 내) 다른 .sh ★★★★★★★★★★★★★★★★★」./이치노
@Nathan Lilienthal의 코멘트 덕분에
새 파일이 "/home/satya/app/app_specific_env"이고 파일 내용은 다음과 같습니다.
#!bin/bash
export FAV_NUMBER="2211"
이 파일 참조를 ~/.bashrc 파일에 추가합니다.
source /home/satya/app/app_specific_env
할 는, 「」를 해 주세요.echo $FAV_NUMBER터미널에 있습니다.값이 출력됩니다.
때, , 금금당면면면면면면면면면면면면면면면면면면면면면면면면면면.source ~/.bashrc커맨드 라인에 표시됩니다.
다른 파일에서 함수를 가져오는 데 몇 가지 문제가 있습니다.
첫째: 이 파일 실행 파일을 수행할 필요가 없습니다.그렇게 하지 않는 게 좋을 거야! 그냥 추가해.
. file
모든 기능을 가져옵니다.그리고 모든 것이 파일에 정의되어 있는 것과 같습니다.
두 번째: 동일한 이름으로 함수를 정의할 수 있습니다.덮어쓰게 됩니다.안 좋아.그렇게 선언해도 좋다
declare -f new_function_name=old_function_name
수입하다그래서 당신은 오래된 함수를 새로운 이름으로 부를 수 있습니다.
셋째: 파일에 정의된 함수의 전체 목록만 가져올 수 있습니다.필요하지 않은 항목이 있으면 설정을 해제할 수 있습니다.그러나 설정 해제 후 기능을 다시 작성하면 기능이 손실됩니다.그러나 위에서 설명한 대로 참조를 설정하면 동일한 이름으로 설정 해제된 후 복원할 수 있습니다.
마지막으로 일반적인 수입 절차는 위험하고 간단하지 않습니다.조심해!이 작업을 보다 쉽고 안전하게 수행하기 위해 스크립트를 작성할 수 있습니다.함수의 일부만 사용하는 경우(전부는 아님) 다른 파일로 분할하는 것이 좋습니다.불행히도 이 기술은 배쉬에서 잘 만들어지지 않았다.예를 들어 python 및 기타 스크립트 언어에서는 쉽고 안전합니다.자체 이름을 사용하여 필요한 함수만 부분적으로 가져올 수 있습니다.우리는 모두 다음 부시 버전에서 동일한 기능을 수행하기를 원합니다.하지만 이제 우리는 당신이 원하는 것을 하기 위해 많은 대구를 추가로 써야 합니다.
백틱을 사용하세요.
$ ./script-that-consumes-argument.sh `sh script-that-produces-argument.sh`
그런 다음 컨슈머 스크립트의 인수로 프로듀서 스크립트의 출력을 가져옵니다.
언급URL : https://stackoverflow.com/questions/8352851/shell-how-to-call-one-shell-script-from-another-shell-script
'programing' 카테고리의 다른 글
| prespare For Segue 전달 방법: 객체 (0) | 2023.04.10 |
|---|---|
| git 'pull request'를 'push request'라고 부르지 않는 이유는 무엇입니까? (0) | 2023.04.10 |
| VBA 함수에서 결과를 반환하는 방법 (0) | 2023.04.10 |
| 클릭 가능한 라벨이 있는 체크박스를 작성하려면 어떻게 해야 합니까? (0) | 2023.04.10 |
| 사전을 보면서 반복할 수 있는 방법이 있나요? (0) | 2023.04.10 |