명령 줄의 스크립트에서 함수를 어떻게 실행할 수 있습니까?
몇 가지 기능이있는 스크립트가 있습니다.
명령 줄에서 직접 함수 중 하나를 실행할 수 있습니까?
이 같은?
myScript.sh func()
스크립트가 함수 만 정의하고 다른 작업은 수행하지 않는 경우 먼저 source
또는 .
명령을 사용하여 현재 셸의 컨텍스트 내에서 스크립트를 실행 한 다음 함수를 호출하기 만하면됩니다. 자세한 내용은를 참조하십시오 help source
.
음, 다른 답변은 옳지 만-확실히 다른 일을 할 수 있습니다. bash 스크립트에 액세스 할 수있는 경우 수정 "$@"
하고 명령 줄의 인수로 확장되는 특수 매개 변수를 끝에 배치하기 만하면 됩니다. 사용자가 지정하면 "단독"이므로 쉘은 그대로 호출하려고 시도합니다. 여기에서 함수 이름을 첫 번째 인수로 지정할 수 있습니다. 예:
$ cat test.sh
testA() {
echo "TEST A $1";
}
testB() {
echo "TEST B $2";
}
"$@"
$ bash test.sh
$ bash test.sh testA
TEST A
$ bash test.sh testA arg1 arg2
TEST A arg1
$ bash test.sh testB arg1 arg2
TEST B arg2
폴란드어의 경우 먼저 명령이 존재하고 함수인지 확인할 수 있습니다.
# Check if the function exists (bash specific)
if declare -f "$1" > /dev/null
then
# call arguments verbatim
"$@"
else
# Show a helpful error
echo "'$1' is not a known function name" >&2
exit 1
fi
다음 명령은 먼저 컨텍스트에 함수를 등록한 다음 호출합니다.
. ./myScript.sh && function_name
간단히 말해서, 아닙니다.
source
( help source
자세한 내용은) 를 사용하여 스크립트의 모든 함수를 환경으로 가져 와서 호출 할 수 있습니다. 이것은 또한 스크립트를 실행하는 효과가 있으므로주의하십시오.
공유 라이브러리 인 것처럼 쉘 스크립트에서 함수를 호출 할 수있는 방법이 없습니다.
나는 전에 실행해서는 안되는 bash 스크립트의 함수가 필요한 상황이 있는데 (예 :) source
문제 @$
는 myScript.sh가 두 번 실행된다는 것입니다. 그래서 아이디어를 생각해 냈습니다. sed로 함수를 얻으려면 :
sed -n "/^func ()/,/^}/p" myScript.sh
그리고 필요할 때 실행하기 위해 파일에 넣고 다음을 사용합니다 source
.
sed -n "/^func ()/,/^}/p" myScript.sh > func.sh; source func.sh; rm func.sh
편집 : 경고-모든 경우에 작동하지 않지만 많은 공개 스크립트에서 잘 작동합니다.
"control"이라는 bash 스크립트가 있고 그 안에 "build"라는 함수가있는 경우 :
function build() {
...
}
그런 다음 다음과 같이 호출 할 수 있습니다 (있는 디렉토리에서).
./control build
다른 폴더 안에 있으면 다음과 같이됩니다.
another_folder/control build
If your file is called "control.sh", that would accordingly make the function callable like this:
./control.sh build
참고URL : https://stackoverflow.com/questions/8818119/how-can-i-run-a-function-from-a-script-in-command-line
'developer tip' 카테고리의 다른 글
PostgreSQL에서 타임 스탬프를 자동으로 업데이트하는 방법 (0) | 2020.08.17 |
---|---|
ASP.NET MVC의 Html.ActionLink에 CSS 클래스를 어떻게 적용합니까? (0) | 2020.08.17 |
Internet Explorer 11 탐지 (0) | 2020.08.17 |
Visual Studio에서 HTML 태그로 선택 항목을 래핑하려면 어떻게하나요? (0) | 2020.08.17 |
Java가 제네릭을 수정하지 않는다는 점에 왜주의해야합니까? (0) | 2020.08.17 |