글쎄, 나는 리눅스 초보자이고 간단한 bash 스크립트에 문제가 있습니다.
실행되는 동안 로그 파일에 추가하는 프로그램이 있습니다. 시간이 지남에 따라 로그 파일이 커집니다. 각 실행 전에 로그 파일의 이름을 바꾸고 이동하여 프로그램의 각 실행에 대해 별도의 로그 파일을 효과적으로 만드는 시작 스크립트를 만들고 싶습니다. 지금까지 얻은 내용은 다음과 같습니다.
DATE=$(date +"%Y%m%d%H%M")
mv server.log logs/$DATE.log
echo program
실행하면 다음이 표시됩니다.
: command not found
program
logs 디렉토리로 이동하여 dir을 실행하면 다음과 같이 표시됩니다.
201111211437\r.log\r
무슨 일이야? 내가 놓친 구문 문제가 있다고 가정하고 있지만 알아낼 수없는 것 같습니다.
업데이트 : 아래 셸터의 의견 덕분에 Windows에서 메모장 ++의 .sh 파일을 편집 한 다음 ftp를 통해 서버로 보내고 ssh를 통해 파일을 실행한다는 사실로 인해 문제가 발생했습니다. . 파일에서 dos2unix를 실행하면 작동합니다.
새로운 질문 : 파일을 다시 보낼 때마다이 수정을 수행하지 않으려면 처음에 파일을 올바르게 저장하려면 어떻게해야합니까?
답변
대본에서 게시 한 몇 줄은 괜찮아 보입니다. 아마도 조금 더 깊은 것 같습니다.
이 오류를 제공하는 줄을 찾아야합니다. set -xv
스크립트 맨 위에 추가하십시오 . 이것은 STDERR 에 실행되는 라인 번호와 명령을 인쇄합니다 . 이렇게하면 스크립트에서이 특정 오류가 발생하는 위치를 식별하는 데 도움이됩니다.
BTW, 스크립트 상단에 shebang이 있습니까? 이와 같은 것을 볼 때 일반적으로 Shebang에 문제가 있다고 예상합니다. 예를 들어 #! /bin/bash
맨 위에 있지만 bash 인터프리터가에있는 /usr/bin/bash
경우이 오류가 표시됩니다.
편집하다
새로운 질문 : 파일을 다시 보낼 때마다이 수정을 수행하지 않으려면 처음에 파일을 올바르게 저장하려면 어떻게해야합니까?
두 가지 방법:
- 선택 편집 -> EOL 변환 -> 유닉스 포맷 은 파일을 편집 할 때 메뉴 항목을 선택합니다. 올바른 줄 끝이 있으면 메모장 ++에서 그대로 유지합니다.
- 모든 새 파일에 올바른 줄 끝이 있는지 확인하려면 설정-> 기본 설정 메뉴 항목으로 이동 하여 기본 설정 대화 상자를 엽니 다. 새 문서 / 기본 디렉토리 탭을 선택합니다 . 에서 새 문서 및 형식 , 선택 유닉스 라디오 버튼을 누릅니다. 닫기 버튼을 클릭 합니다.
답변
mv server.log logs/$(date -d "today" +"%Y%m%d%H%M").log
답변
bash 내의 한 줄 메서드는 이와 같이 작동합니다.
[일부 출력]> $ (date “+ % Y. % m. % d- % H. % M. % S”). ver
확장자가 ver 인 타임 스탬프 이름으로 파일을 생성합니다. 다음과 같이 날짜 스탬프 파일 이름에 스냅 샷을 나열하는 작업 파일은 작동을 보여줄 수 있습니다.
find . -type f -exec ls -la {} \; | cut -d ' ' -f 6- >$(date "+%Y.%m.%d-%H.%M.%S").ver
물론이야
cat somefile.log > $(date "+%Y.%m.%d-%H.%M.%S").ver
또는 더 간단
ls > $(date "+%Y.%m.%d-%H.%M.%S").ver
답변
간단한 파일 회전에이 명령을 사용합니다.
mv output.log `date +%F`-output.log
로컬 폴더에 2019-09-25-output.log
답변
글쎄, 그것은 당신의 질문에 대한 직접적인 대답은 아니지만, GNU / Linux에는 로그 파일을 정기적으로 회전 시켜서 오래된 파일을 일정한 한계까지 압축하는 도구가 있습니다. 이것의logrotate
답변
메모장에서 스크립트를 작성할 수 있지만 다음을 사용하여 변환하십시오-> $ sed -i ‘s / \ r $ //’yourscripthere
나는 cygwin에서 일할 때 항상 그것을 사용하고 작동합니다. 도움이 되었기를 바랍니다
답변
