날짜 또는 고양이 매개변수를 완전히 표시하지 않는 bash 기능

날짜 또는 고양이 매개변수를 완전히 표시하지 않는 bash 기능

로그 저장소 백업을 위한 bash 스크립트를 작성 중입니다.

  • 나는 다음과 같이 정의한 함수를 사용합니다.

    logit () {
        echo " $1  $2 "  >> /path/to/log
    }
    
  • 왜냐하면 logit 'Starting Backup' $(date +'%D %T')나는 다음과 같은 결과를 얻었기 때문입니다.

    Starting Backup 01/11/22
    

    그래서 시간이 지났고 분명히 stdout기능이 단축되었습니다.

  • 그것으로 echo $(date +'%D %T')나도 시간을 얻었다 stdout.

  • 또한 다음과 같은 로그 기능을 사용하고 싶습니다.

    logit 'DB-LOGS' $(cat /path/to/sql)
    

    밝혀지다

    DB-LOG mysqldump:
    

    여기서도 일부 표준 출력이 누락되었습니다.

완전한 출력을 얻으려면 함수에 무엇을 변경하거나 추가해야 합니까?

답변1

큰따옴표 명령 대체:

logit 'Starting Backup' "$(date +'%D %T')"

따옴표가 없으면 결과는 $(date ...)단어로 구분되고 파일 이름은 와일드카드로 표시됩니다. 단축 없음: $IFS여전히 기본값(공백 문자 포함)으로 설정되어 있다고 가정하면 날짜와 시간이 별도의 인수로 함수에 전달되므로 $3결국 시간을 사용하지 않게 됩니다.

답변2

"$*"스크립트에서 를 사용하여 모든 매개변수를 하나의 문자열로 연결할 수 있습니다.

logit () {
    echo " $* "  >> /path/to/log
}

( "$*"첫 번째 문자를 IFS연결 문자로 사용하며 기본값은 공백입니다.)

또는 각 인수 주위에 추가 공백을 원할 경우 다음 printf과 함께 사용하십시오 "$@".

logit () {
    { printf " %s " "$@"; echo; } >> /path/to/log
}

(여기서 "$@"각 인수를 개별적으로 확장하고 printf필요한 만큼 형식 문자열을 반복합니다. echo마지막 줄 바꿈을 추가합니다.)

관련 정보