bash 스크립트 파일에서 명령을 매개 변수화하려면 어떻게해야합니까?

의지

편집-bash $1변수를 사용하지 않습니다 . 예 필드 지정자를 사용 : $1, $2, $3있습니다 awk입력 레코드 필드가 불행하게도 내가 너무 빨리 예를했고, 혼합 업 예.

나는 이것이 일반적인 문제라고 생각합니다. awk데모 도구로 사용 하고 있습니다. 목표는 ( awk) 스크립트 매개 변수를 awk(또는 모든 도구) 명령에 삽입하는 것입니다.

우리는 awk결과를 생성하기 위해 STDIN에서 제공되는 필드를 사용합니다 . 식별자는 $1, $2, $3있는 awk표준 입력 스트림으로부터 필드.

원하는 솔루션 A (선호 개념), 다음과 같습니다.

#!/bin/bash  -f
#   script: blue.sh
#
    awk -e '{ print $1 " and " $2 " silly example" ;}'
#

그리고 원하는 출력 :

$  echo  "red blue yellow" > ./blue.sh 
red and blue silly example
$

Alternaitve B는 다음과 같이 생각할 수 있습니다.

#!/bin/bash  -f
#   script: green.sh
#
    wrk="awk -e '{ print \$3 \" and \" \$2 \" variable example\" ;}'  "
#
    echo "work is:"
    echo $wrk
    echo
    $wrk

그리고 원하는 출력 :

$  echo  "red blue yellow" > ./green.sh 
wrk is:
awk -e '{ print $3 " and " $2 " variable example" ;}'  

yellow and blue variable example
$

문제는 -e표현 에 대한 인용에 있습니다.

이러한 사례 중 하나를 달성 할 수있는 수단이 있습니까?

의지

해결책을 찾았지만 초기 비전과는 상당히 다른 것으로 밝혀졌습니다. bash명령에서 -script 변수 를 확장하는 방법을 찾을 수 없으므로 '구성'해야합니다. 이 설정 아웃이 xargs몇 가지 이유가 쉘이 그 일을하고 싶었 방법으로 할 수 있도록 unsuitanble했다.

예제 실행과 코드를 제시하고 어떻게 / 무슨 일이 일어나는지 설명하겠습니다. "# (2)"와 같은 레이블로 대화 할 영역을 표시했습니다.

:

입력 ...

$ svn status -qu ..
M            28637   /src/line.h
M            28637   /src/line.cpp
        *    28637   /testing/CheckWindows.py

처리 중 ...

반복 스크립트는 두 가지 매개 변수를 사용합니다.

  1. 입력 목록에서 실행할 템플릿 또는 하나 이상의 명령
  2. awk입력 스트림을 필터링하는 몇 가지 명령

명령 줄 :

 svn status -qu .. | repeat                                        \
                       'cp -v $ff  /mnt/testhost/testarea/r02/$ff' \
                       "{  if( $1 == "M" ){ print  $3; } }"

출력 ...

'/src/line.h' -> '/mnt/testhost/testarea/r02/src/line.h'
'/src/line.cpp' -> '/mnt/testhost/testarea/r02/src/line.cpp'

무슨 일 이야?

  • 로컬로 수정 된 파일 만 r02/testarea
    • 분명히 필터링은 무엇이든 될 수 있습니다.
  • 의 목적은 repeat입력에서 필터링 된 목록에 대한 일련의 명령을 반복하는 것입니다.

주석이 달린 코드 :

    #!/bin/bash
    #   repeat.bash

    function  repeat
    {
        local -a    actions=()
        local       DELIMITER=";"
        local       filter="${2}"
        local       cmd=""

        local       wrk="${1}${DELIMITER}"        # (1)   Template
        local       str=""


        while [[ $wrk  ]]                         # (2)   Split-up individual commands
        do
            str="${wrk%%"${DELIMITER}"*}"
            actions+=( "${str}" )

            wrk="${wrk#*"${DELIMITER}"}"
        done

        echo    "actions: "                       # (3)   Debugging code

        for action in "${actions[@]}"
        do
            echo  "        => \"${action}\"."
        done
        echo  "filter  => '${filter}'."


        ex="${filter}"                            # (4)   Awk instructions to 
                                                  #       process input stream


        for ff in $(awk -e "${ex}")               # (5)   .
        do
            for action in "${actions[@]}"         # (6)   .
            do
                cmd="${action//\$\{ff\}/${ff}}"   # (7)   .
                cmd="${cmd//\$ff/${ff}}"

                ${cmd}                            # (8)   .
            done
        done

        return

    }

    repeat  "${@:1}"                              # (9)   .

참고 :

  1. Arg $1는 명령 템플릿입니다.
    *
    나중에 구문 분석을 위해 추가 구분 기호가 끝에 추가됩니다.
  2. $1일반적으로 둘 이상의 명령입니다. 입력 인수를 개별 세미콜론으로 구분 된 명령 문자열로 분할합니다.
  3. 확인을 위해 매개 변수를 인쇄하십시오.
  4. ex변수에 필터를로드합니다 .
    *
    이 예에서는로 ex전달 된 필터 만 $2있습니다.
  5. 필터링 된 입력 줄에서 생성 된 각 문자열을 반복합니다.
    *
    exawk선택 / 생성 필터로 실행할 명령 이됩니다 .
  6. 모든 action명령 템플릿을 반복합니다 .
  7. 명령 문자열 내에서 구문 $ff확장 합니다.${ff}action
  8. 각 파일에 대해 생성 된 각 명령 줄을 실행합니다 $ff..
  9. 스크립트를 실행하려면 함수를 호출하십시오.

그것이 뿌려 졌을 때 이것은 awk또는 템플릿 문자열에 인자를 직접 주입하는 것이 가능하지 않았기 때문에 상당히 달라졌습니다 . 그러나 해결 방법은 너무 불편하지 않으며 비밀 확장 등없이 모든 것이 어떻게 작동하는지 보여줍니다.

이 아이디어가 유용하다고 믿습니다. 이제 작업 스 니펫이 생겼으므로 매우 편리합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

명령 줄 또는 bash 스크립트 파일을 통해 Talend에서 내 보낸 작업의 매개 변수를 어떻게 전달할 수 있습니까?

분류에서Dev

BASH 스크립트의 SED 명령에서 사용할 변수로 AWK의 출력을 저장하려면 어떻게해야합니까?

분류에서Dev

STDIN 및 명령 줄 인수 모두에서 매개 변수를 허용하는 Perl 스크립트를 얻으려면 어떻게해야합니까?

분류에서Dev

STDIN 및 명령 줄 인수 모두에서 매개 변수를 허용하는 Perl 스크립트를 얻으려면 어떻게해야합니까?

분류에서Dev

완료 할 bash 스크립트에서 명령을 얻으려면 어떻게해야합니까? (파일은 cp로 잘림)

분류에서Dev

파일에서 특정 값을 찾고 bash 스크립트의 변수에 저장하려면 어떻게해야합니까?

분류에서Dev

사용자 지정 bash 스크립트 내에서 다른 명령의 파이프 라인 출력을 사용하려면 어떻게해야합니까?

분류에서Dev

Jenkins에서 웹 요청 본문을 Powershell 스크립트에 매개 변수로 전달하려면 어떻게해야합니까?

분류에서Dev

bash 스크립트 서브 쉘 외부에서 cd 명령을 적용하려면 어떻게해야합니까?

분류에서Dev

Bash : 명령 줄에서 스크립트를 호출하고 두 문자열을 전달하려면 어떻게해야합니까?

분류에서Dev

함수 나 스크립트에 위치 매개 변수로 배열을 제공하려면 어떻게해야합니까?

분류에서Dev

bash / shell 스크립트에 포함 된 긴 sed 명령을 여러 줄로 래핑하려면 어떻게해야합니까?

분류에서Dev

"명령을 찾을 수 없음"오류없이 bash 스크립트에서 변수에 문자열이 포함되어 있는지 테스트하려면 어떻게해야합니까?

분류에서Dev

컨트롤러에서 매개 변수 값을 검색하여 보려면 어떻게해야합니까?

분류에서Dev

blender-2.68에서 .ply 파일을로드하고 명령 줄 / 스크립트를 통해 수정자를 적용하려면 어떻게해야합니까?

분류에서Dev

단일 bash 스크립트에서 여러 화면 세션을 시작하려면 어떻게해야합니까?

분류에서Dev

변수에서 처음 n 줄과 마지막 n 줄을 제거하는 bash 스크립트를 얻으려면 어떻게해야합니까?

분류에서Dev

자바 스크립트 개체에서 속성을 제거하려면 어떻게해야합니까?

분류에서Dev

Node / pg-pool에서 Postgres 어레이 값을 매개 변수화하려면 어떻게해야합니까?

분류에서Dev

bash 스크립트에 대한 명령의 여러 줄 출력 필드를 테스트하려면 어떻게해야합니까?

분류에서Dev

매번 소싱하지 않고도이 스크립트 파일의 함수를로드하려면 어떻게해야합니까? "명령을 찾을 수 없음"(배시 / 스크립팅 기본 사항)

분류에서Dev

SSIS 2012에서 SSIS 프로젝트 매개 변수 설정을 자동화하려면 어떻게해야합니까?

분류에서Dev

실행될 때 bash 스크립트에서 특정 명령 만 인쇄하려면 어떻게해야합니까?

분류에서Dev

실행될 때 bash 스크립트에서 특정 명령 만 인쇄하려면 어떻게해야합니까?

분류에서Dev

스크립트 자체에서 bash 스크립트의 출력을 억제하려면 어떻게해야합니까?

분류에서Dev

R 스크립트에서 모든 매개 변수에 대한 변수를 사용하여 시퀀스를 생성하려면 어떻게해야합니까?

분류에서Dev

이름을 기반으로 새 폴더에 파일을 복사하는 bash 스크립트를 작성하려면 어떻게해야합니까?

분류에서Dev

Bash 스크립트에서 명령의 결과와 반환 코드를 동시에 얻으려면 어떻게해야합니까?

분류에서Dev

명령 줄의 셸 매개 변수 확장이 bash 스크립트에서 작동하지 않습니다.

Related 관련 기사

  1. 1

    명령 줄 또는 bash 스크립트 파일을 통해 Talend에서 내 보낸 작업의 매개 변수를 어떻게 전달할 수 있습니까?

  2. 2

    BASH 스크립트의 SED 명령에서 사용할 변수로 AWK의 출력을 저장하려면 어떻게해야합니까?

  3. 3

    STDIN 및 명령 줄 인수 모두에서 매개 변수를 허용하는 Perl 스크립트를 얻으려면 어떻게해야합니까?

  4. 4

    STDIN 및 명령 줄 인수 모두에서 매개 변수를 허용하는 Perl 스크립트를 얻으려면 어떻게해야합니까?

  5. 5

    완료 할 bash 스크립트에서 명령을 얻으려면 어떻게해야합니까? (파일은 cp로 잘림)

  6. 6

    파일에서 특정 값을 찾고 bash 스크립트의 변수에 저장하려면 어떻게해야합니까?

  7. 7

    사용자 지정 bash 스크립트 내에서 다른 명령의 파이프 라인 출력을 사용하려면 어떻게해야합니까?

  8. 8

    Jenkins에서 웹 요청 본문을 Powershell 스크립트에 매개 변수로 전달하려면 어떻게해야합니까?

  9. 9

    bash 스크립트 서브 쉘 외부에서 cd 명령을 적용하려면 어떻게해야합니까?

  10. 10

    Bash : 명령 줄에서 스크립트를 호출하고 두 문자열을 전달하려면 어떻게해야합니까?

  11. 11

    함수 나 스크립트에 위치 매개 변수로 배열을 제공하려면 어떻게해야합니까?

  12. 12

    bash / shell 스크립트에 포함 된 긴 sed 명령을 여러 줄로 래핑하려면 어떻게해야합니까?

  13. 13

    "명령을 찾을 수 없음"오류없이 bash 스크립트에서 변수에 문자열이 포함되어 있는지 테스트하려면 어떻게해야합니까?

  14. 14

    컨트롤러에서 매개 변수 값을 검색하여 보려면 어떻게해야합니까?

  15. 15

    blender-2.68에서 .ply 파일을로드하고 명령 줄 / 스크립트를 통해 수정자를 적용하려면 어떻게해야합니까?

  16. 16

    단일 bash 스크립트에서 여러 화면 세션을 시작하려면 어떻게해야합니까?

  17. 17

    변수에서 처음 n 줄과 마지막 n 줄을 제거하는 bash 스크립트를 얻으려면 어떻게해야합니까?

  18. 18

    자바 스크립트 개체에서 속성을 제거하려면 어떻게해야합니까?

  19. 19

    Node / pg-pool에서 Postgres 어레이 값을 매개 변수화하려면 어떻게해야합니까?

  20. 20

    bash 스크립트에 대한 명령의 여러 줄 출력 필드를 테스트하려면 어떻게해야합니까?

  21. 21

    매번 소싱하지 않고도이 스크립트 파일의 함수를로드하려면 어떻게해야합니까? "명령을 찾을 수 없음"(배시 / 스크립팅 기본 사항)

  22. 22

    SSIS 2012에서 SSIS 프로젝트 매개 변수 설정을 자동화하려면 어떻게해야합니까?

  23. 23

    실행될 때 bash 스크립트에서 특정 명령 만 인쇄하려면 어떻게해야합니까?

  24. 24

    실행될 때 bash 스크립트에서 특정 명령 만 인쇄하려면 어떻게해야합니까?

  25. 25

    스크립트 자체에서 bash 스크립트의 출력을 억제하려면 어떻게해야합니까?

  26. 26

    R 스크립트에서 모든 매개 변수에 대한 변수를 사용하여 시퀀스를 생성하려면 어떻게해야합니까?

  27. 27

    이름을 기반으로 새 폴더에 파일을 복사하는 bash 스크립트를 작성하려면 어떻게해야합니까?

  28. 28

    Bash 스크립트에서 명령의 결과와 반환 코드를 동시에 얻으려면 어떻게해야합니까?

  29. 29

    명령 줄의 셸 매개 변수 확장이 bash 스크립트에서 작동하지 않습니다.

뜨겁다태그

보관