현재 날짜를 가져오고 PHP 스크립트를 실행하고 출력(및 오류)을 현재 날짜가 포함된 파일 이름으로 리디렉션하는 작은 스크립트가 있습니다.
DATE=$(date +"%Y%m%d")
FILE="log/${DATE}.log"
php -q script.php >> $FILE 2>&1
내 로컬 컴퓨터(Windows 7, Aptana IDE)에서 이 스크립트를 실행하면 PHP 스크립트가 제대로 작동하고 로그 파일에 예상된 파일 이름이 있습니다 20140502.log
.
그러나 SFTP를 통해 원격 시스템에 스크립트를 푸시하고 스크립트를 실행하면 파일 이름은 다음과 같습니다.
20140502?.log?
무엇이 문제일까요? 인코딩 오류입니까(예: SFTP 업로드 인코딩은 ANSII이지만 UTF-8이 필요함)? 아니면 스크립트 자체에서 무엇인가를 변경해야 합니까?
시스템/셸에 대한 정보:
[foo@bar path]$ sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
재미있는 사실: cronjob에 의해 스크립트가 호출되면 물음표가 표시되지 않습니다. 스크립트를 수동으로 실행할 때만.
답변1
줄 끝에 인쇄할 수 없는 문자가 있을 수 있습니다(예: Windows의 CRLF). 다음을 실행하세요.
cat -A scriptname
원격 컴퓨터에서는 스크립트의 모든 문자가 표시됩니다. 그런 다음 유닉스 계열 형식으로 변환하고 실행할 수 있습니다.
dos2unix scriptname
답변2
답변을 시도한 후 이 문제를 해결하는 데 Notepad++가 매우 유용하다는 것을 알았습니다.
cat -A 스크립트 이름 >
dos2unix 스크립트 이름
변환하려고 할 때 여전히 오류가 발생하기 때문입니다.
Notepad++를 사용하는 경우 이 옵션은 편집 메뉴/EOL 변환/Unix/OSX 형식에서 찾을 수 있습니다.
아직 학습자이지만 이 방법으로 문제가 해결되었지만 이전 솔루션이 문제를 찾는 데 도움이 되었습니다.