별칭이나 함수 내에서 작동하도록 실행 가능한 명령을 어떻게 래핑할 수 있나요?

별칭이나 함수 내에서 작동하도록 실행 가능한 명령을 어떻게 래핑할 수 있나요?

나는 여전히 쉘 스크립팅의 단점을 파악하는 중이지만 점점 익숙해지고 있는 것 같습니다.

자주 생성해야 하는 tar 파일을 생성하기 위해 별칭을 생성하려고 했으나 계속 tar 오류가 발생합니다. 테스트와 마찬가지로 간단한 래퍼를 만들어 보았으나 작동하지 않았습니다.

function eztar(){

    if [ -d $1 ]
    then
        export QTAR="$1.tar";
        tar –cvf ${QTAR} "$1/";

    else
        echo "Missing directory name";
    fi

}

>eztar mydir
tar: invalid option -- ''
Try `tar --help' or `tar --usage' for more information.

이 경우 -cvf 옵션이 어떻게든 사용됩니까?

어쨌든 그건 또 다른 문제입니다.

Apache 메모리 부족 문제가 있습니다. 너무 많은 종료 실패로 인해 세마포어가 가득 찼다는 사실을 발견했기 때문에 이 문제를 해결하기 위해 마음에 드는 스크립트를 찾아 별칭으로 실행하려고 했습니다. (그런데 이 작업을 수행하는 더 좋은 방법이 있습니까?) 별칭을 확인할 때 for 루프가 현재 세마포어 목록으로 확장되는데 이는 내가 원하는 것이 아니기 때문에 이것을 함수에 넣어야 한다고 생각합니다.

alias semfix='eval "for i in `ipcs -s # grep apache # awk '{print $2}'` ; do ipcrm -s $i; done";'

나는 Unix의 모든 것을 가지고 별칭이나 래퍼 함수를 ​​만들 수 없다는 것을 배우고 있습니다!

답변1

오타를 제외하면 첫 번째 기능에는 아무런 문제가 없습니다.
앞의 문자는 cvf빼기 기호가 아닙니다.
표준을 사용하고 있습니까? 미국식 101키 키보드?

모두 제거하면(대부분의 tar 스위치에서 빼기 기호는 선택 사항임) 기능이 제대로 작동합니다.
그렇지 않으면 적절한 방법을 사용하여 문제를 해결할 수 있습니다.-cvf

export
또한 내보내기에는 이와 같은 함수에 필요한 것보다 더 높은 환경 변수 지속성이 필요 하지 않습니다 .

나는 당신이 읽을 것을 제안합니다고급 Bash 스크립팅 가이드
보세요 let, local그리고 export.
서로 어떻게 다른지, 언제 다른 것을 사용해야 하는지 알아보세요.

예, 두 번째 것을 함수로 다시 작성해야 합니다.
배우면서 중첩된 참조와 파이프가 줄어들면 함수와 별칭을 더 쉽게 작성할 수 있습니다.

나중에 하나의 라이너가 나옵니다 :)

답변2

tar마이너스 기호를 사용하지 마세요 .tar cfv

이것은 원래의 비표준 형식입니다.

관련 정보