원격 컴퓨터에서 스크립트를 실행할 때 파일 이름에 물음표가 포함되는 이유는 무엇입니까? 있습니다 (예 :) 20140502.log. 그러나 SFTP를

현재 날짜를 가져 와서 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 형식에 옵션이 있습니다.

여전히 많은 학습자가 있지만이 방법으로 문제를 해결했지만 이전 솔루션은 문제의 위치를 ​​찾는 데 도움이되었습니다.


답변