>

마지막 명령에서 스크립트가 실행되지 않습니다.

터미널에서 개별적으로 실행될 때 명령이 제대로 실행됩니다. ! ... 부분을 매개 변수에 넣고 주변을 이동하고 다양한 괄호와 줄 바꿈을 사용하고 전체 경로를 사용하려고했습니다. 대체 솔루션에 관심이 없습니다.이 솔루션이 스크립트에서 구체적으로 작동하지 않는 이유에 관심이 있습니다.

   #!/bin/bash
    mkdir alllogs
    for i in $(locate *.log); do cp $i alllogs/; done
    tar -zcvf alllogs/logs.gz alllogs/*
    rm -v alllogs/!('logs.gz')

스크립트는 Linux 시스템에서 다양한 로그를 수집하여 단일 파일로 압축 한 후 압축 된 파일 만 남기고 로그 사본을 지 웁니다. 그러나 스크립트를 통해 실행하면 복사본을 삭제하는 명령이 실패하지만 터미널에서 제대로 작동합니다. 주어진 오류는 다음과 같습니다 :

   ./x.sh: line 7: syntax error near unexpected token `('
    ./x.sh: line 7: `rm -v alllogs/!('logs.gz')'

  • 답변 # 1

    이 형식의 패턴 일치는 기본적으로 활성화되어 있지 않습니다. extglob 를 명시 적으로 설정해야합니다. .

    shopt -s extglob
    
    

  • 답변 # 2

    빈트 네스의 말 또는 대체

    $(locate *.log)
    
    

    with

    `locate *.log`
    
    

관련 자료

  • 이전 ruby on rails - 현재 페이지? 중첩 된 리소스
  • 다음 node.js - MERN 스택 인증 및 권한