기능 매개 변수에 의해 제공되는 명령 실행


15

매개 변수가 메소드에 제공하는 명령을 실행하는 bash 스크립트에서 함수 메소드를 작성하려고합니다.

다음과 같은 의미 :

special_execute()
{
    # Some code

    # Here's the point where the command gets executed
    $@

    # More code
}

special_execute echo "abc"

나는 이미 내가 시도 $@, "$@", $*, "$*"내가 그걸 어떻게 할 수 있을까?


$@나를 위해 작동 .. special() { $@; }... special echo "foo"제공foo
Drav Sloan

그것은 나를 위해 작동하지 않았다 : perl -MTime::HiRes=sleep -le 'for(1..100) { print; sleep 0.05; }'그리고tar -cvf "backups/test.tar" -P "backups/uncompressed_server_backup_(DO NOT TOUCH!)/server/"
BrainStone

3
사용은 주변 시세 "$@": 다음 당신이 더 많은 성공이있을 것이다,
Drav 슬론에게

확인. 이제 작동합니다. 실제 호출 코드를 어지럽 힌 것처럼 보입니다.
BrainStone

문제 없습니다, 우리 모두에게는 그 순간이 있습니다 :)
Drav Sloan

답변:


10

함수에 인수를 전달할 때 인용 문제 일 뿐이라고 생각합니다.

다음과 같이 호출하십시오.

$ 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

별칭을 사용할 때 '명령을 찾을 수 없습니다'라는 오류가 발생하는 이유는 무엇입니까?
Elie G.

@DrunkenPoney-그런 cmd는 없습니다 alias.
slm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.