bash 스크립트에서 드라 이런 구현


15

bash 스크립트에서 dry-run 옵션을 어떻게 구현합니까?

스크립트가 드라이 런으로 실행되는 경우 모든 단일 명령을 if에 래핑하고 명령을 실행하는 대신 에코하는 것을 생각할 수 있습니다.

다른 방법은 함수를 정의한 다음 해당 함수를 통해 각 명령 호출을 전달하는 것입니다.

다음과 같은 것 :

function _run () {
    if [[ "$DRY_RUN" ]]; then
        echo $@
    else
        $@
    fi
}

`_run mv /tmp/file /tmp/file2`

`DRY_RUN=true _run mv /tmp/file /tmp/file2`

이것이 잘못 되었습니까? 훨씬 더 좋은 방법이 있습니까?


따라서 실제로 명령을 실행하지 않고 명령이 수행 할 작업 ($ VARIABLES 값 포함)을 인쇄하려고합니다. _run()때로는 'set -xv'와 함께 함수 와 같은 것을 사용 하지만 더 나은 방법을 원합니다.
Stefan Lasiewski

그래, 정확히 bash에 설정할 수있는 내부 변수가 없는지 궁금해서 명령이 함수를 전달하는 대신 실제로 실행되지 않습니다
Andrei Serdeliuc

2
이 질문이 커뮤니티 위키로 표시 될 이유는 없습니다.
추후 공지가있을 때까지 일시 중지되었습니다.

배쉬는 껍질입니다. 드라 이런을 할 이유가 없습니다. 나는 당신이 이미 한 것보다 더 좋은 방법이 있다고 생각하지 않습니다.
d -_- b

답변:


2

참조 BashFAQ / 050 : 나는 변수에 명령을 넣을려고하지만, 복잡한 경우는 항상 실패! 이 주제에 대한 토론.

지금은 제거되었지만 프로그램에 테스트 기능을 추가하는 방법 섹션 이 여전히 유용 할 수 있습니다.


대안은 아니지만 긴 bash 프로그램을 테스트하고 작업하는 데 훌륭한 리소스처럼 보입니다.
Andrei Serdeliuc

언급 한 바와 같이 링크 된 페이지의 특정 부분에 앵커를 추가 한 편집 내용을 롤백하여 특정 설명 방법을 가리키는 것이 아니라 토론을 전체적으로 읽는 것입니다. 링크 된 페이지의 요점은 일반적으로 많은 명령이 있기 때문에 명령이 변수에 실행되도록하지 않는 것입니다.
추후 공지가있을 때까지 일시 중지되었습니다.

이 답변 이이 기사의 주요 요점을 요약하면 훨씬 더 유용 할 것입니다. 한 줄 답변은 여전히 ​​잘못입니다.
Mark Booth

4

@Dennis Williamson의 답변을 듣고 싶었습니다. 내가 가진 것은 다음과 같습니다.

Run () {
    if [ "$TEST" ]; then
        echo "$*"
        return 0
    fi

    eval "$@"
}

eval "$@"여기서 중요하며, 더 나은 단순히하고있다 $*. 공백 / 따옴표없이 모든 매개 $@변수를 $*리턴하고 모든 매개 변수를 리턴합니다.

$ mkdir dir
$ touch dir/file1 dir/file2
$ FOO="dir/*"
$ TEST=true Run ls -l $FOO
ls -l dir/file1 dir/file2
$ Run ls -l $FOO
-rw-r--r--  1 stefanl  stefanl  0 Jun  2 21:06 dir/file1
-rw-r--r--  1 stefanl  stefanl  0 Jun  2 21:06 dir/file2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.