현재 날짜를 가져 와서 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 업로드를위한 인코딩은 UTF-8이 예상되는 ANSII입니다. 아니면 스크립트 자체에서 아무것도 변경해야합니까?
시스템 / 쉘에 대한 정보 :
[foo@bar path]$ sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
재미있는 사실 : cronjob이 해당 스크립트를 호출하면 물음표가 표시되지 않습니다. 스크립트를 수동으로 실행하는 경우에만 가능합니다.
답변
줄 끝에 인쇄 할 수없는 문자가있을 수 있습니다 (예 : Windows의 CRLF).
cat -A scriptname
원격 컴퓨터에서는 스크립트의 모든 문자가 표시됩니다. 그런 다음 실행중인 유닉스와 같은 형식으로 변환 할 수 있습니다
dos2unix scriptname
답변
메모장 ++는 답변을 시도한 후이를 수정하는 데 매우 유용합니다.
고양이-스크립트 이름>
dos2unix 스크립트 이름
변환하려고 할 때 여전히 오류가 발생했기 때문입니다.
메모장 ++를 통해 편집 메뉴 / EOL 변환 / 유닉스 / OSX 형식에 옵션이 있습니다.
여전히 많은 학습자가 있지만이 방법으로 문제를 해결했지만 이전 솔루션은 문제의 위치를 찾는 데 도움이되었습니다.