매개 변수가 메소드에 제공하는 명령을 실행하는 bash 스크립트에서 함수 메소드를 작성하려고합니다.
다음과 같은 의미 :
special_execute()
{
# Some code
# Here's the point where the command gets executed
$@
# More code
}
special_execute echo "abc"
나는 이미 내가 시도 $@
, "$@"
, $*
, "$*"
내가 그걸 어떻게 할 수 있을까?
답변
함수에 인수를 전달할 때 인용 문제 일 뿐이라고 생각합니다.
다음과 같이 호출하십시오.
$ special_execute "echo 'abc'"
'abc'
작은 따옴표를 원하지 않으면 abc
다음과 같이 따옴표 를 변경하십시오.
$ special_execute "echo abc"
abc
디버깅
함수의 내부를 감싸서 더 자세하게 반향 할 수 있습니다.
$ function special_execute() { set -x; "$@"; set +x; }
그런 다음 함수를 통해 명령을 실행 special_execute
하면 진행 상황을 확인할 수 있습니다.
PS 예 :
$ special_execute ps -eaf
+ ps -eaf
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Aug21 ? 00:00:01 /sbin/init
root 2 0 0 Aug21 ? 00:00:00 [kthreadd]
...
펄 예제 :
$ special_execute perl -MTime::HiRes=sleep -le 'for(1..10) { print; sleep 0.05; }'
+ perl -MTime::HiRes=sleep -le 'for(1..10) { print; sleep 0.05; }'
1
2
3
4
5
6
7
8
9
10
+ set +x
파싱 인수 $1
로 전달 된 인수를 구문 분석하기 위해 이와 같은 작업을 수행 할 수 $1
있습니다.
$ function special_execute() {
[ "$1" -eq "-123" ] && echo "flagY" || echo "flagN";
shift;
set -x; "$@"; set +x;
}
예
디버깅이 활성화 된 상태 :
$ special_execute -123 perl -MTime::HiRes=sleep -le 'for(1..5) { print; sleep 0.05; }'
flagY
+ perl -MTime::HiRes=sleep -le 'for(1..5) { print; sleep 0.05; }'
1
2
3
4
5
+ set +x
디버깅 해제- -123
:
$ special_execute -123 perl -MTime::HiRes=sleep -le 'for(1..5) { print; sleep 0.05; }'
flagY
1
2
3
4
5
디버깅 해제- -456
:
$ special_execute -456 perl -MTime::HiRes=sleep -le 'for(1..5) { print; sleep 0.05; }'
flagN
1
2
3
4
5