인수로 메서드에 주어진 명령을 실행하는 bash 스크립트에서 함수 메서드를 만들려고 합니다.
이는 다음을 의미합니다.
special_execute()
{
# Some code
# Here's the point where the command gets executed
$@
# More code
}
special_execute echo "abc"
이거 해봤는데 $@
어떻게 해야하나요?"$@"
$*
"$*"
답변1
함수에 인수를 전달할 때의 참조 문제일 뿐이라고 생각합니다.
다음과 같이 호출해 보세요.
$ special_execute "echo 'abc'"
'abc'
작은따옴표를 사용하지 않으려면 abc
다음과 같이 따옴표를 변경하세요.
$ special_execute "echo abc"
abc
디버그
좀 더 자세한 방식으로 다시 에코되도록 함수의 내부 구조를 래핑할 수 있습니다.
$ function special_execute() { set -x; "$@"; set +x; }
그런 다음 함수를 통해 명령을 실행하면 special_execute
어떤 일이 발생하는지 확인할 수 있습니다.
추신: 예:
$ 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