함수 인수가 제공하는 명령을 실행합니다.

함수 인수가 제공하는 명령을 실행합니다.

인수로 메서드에 주어진 명령을 실행하는 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

관련 정보