원격 컴퓨터에서 스크립트를 실행할 때 파일 이름에 물음표가 포함되는 이유는 무엇입니까?

원격 컴퓨터에서 스크립트를 실행할 때 파일 이름에 물음표가 포함되는 이유는 무엇입니까?

현재 날짜를 가져오고 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 형식에서 찾을 수 있습니다.

아직 학습자이지만 이 방법으로 문제가 해결되었지만 이전 솔루션이 문제를 찾는 데 도움이 되었습니다.

관련 정보