로그 저장소 백업을 위한 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
마지막 줄 바꿈을 추가합니다.)