2009-11-07 2 views
0

내가 변수 $이를 새를 기대하고있는 다음 코드는
그러나 내 시스템이 반환 /var/ftp/pub/faxes/myfile.txt.pdf 할 감안할 때 : ".PDF/FTP/술집/팩스/MYFILE.TXT "변수 부패

$ 내선 반환 :"TXT "을
$ oFileName 반환 :"나는이 백 가지를 시도 /var/ftp/pub/faxes/myfile.txt "

을 운이없는 길.

PDF=".pdf" 

#extract the file.ext from the script 
FileName1=`head $f -n1 | awk -F/ '{print $NF}' | sed 's/\"//'` 
FileName2=`head $f -n1 | awk -F/ '{print $NF}' | sed 's/\"//'` 
FileName3=`head $f -n1 | awk -F/ '{print $NF}' | sed 's/\"//'` 

FileName=`basename $FileName1` 
Ext=`echo $FileName | awk -F . '{print $NF}'` 

FileName=`basename $FileName2` 
oFileName=/var/ftp/pub/faxes/${FileName} 

FileName=`basename $FileName3` 
NewFile=/var/ftp/pub/faxes/${FileName}${PDF} 

echo $oFileName 
echo $NewFile 
echo $Ext 

도움을 주시면 감사하겠습니다.

+1

'$ FileName' 또는'$ FileName3'을 echo하지 않았기 때문에 우리는 도울 수 없습니다. –

+0

그래서 실제로/var를 .pdf로 대체하고 있습니까? 아니면 .pdf/var/ftp ..라고되어 있나? – falstro

+1

공백이있는 파일 이름을 올바르게 처리 할 수 ​​있도록 백틱이없는 모든 배정에 큰 따옴표 (' ""')를 추가해야합니다. – Thomas

답변

4

댓글 : Linux 대신 일반 유닉스 계열 시스템으로 이동 한 경우 'head $f -n1'으로 도망 가지 않습니다. 파일 이름 앞에 옵션 (제어) 인수를 넣어야하므로 'head -n1 $f'을 사용하십시오. (당신이 환경 변수 POSIXLY_CORRECT를 설정하면, 리눅스는 다른 시스템과 동일하게 작동합니다.)

코멘트 : 당신은 완벽하게 작성할 수

FileName1=`head -n1 $f | awk -F/ '{print $NF}' | sed 's/\"//'` 
FileName2=$Filename1 
FileName3=$Filename1 

그것은 같은에서 같은 세 가지 프로그램을 실행하는 것보다 더 의미가 있습니다 데이터를 세 번.

설명 : 당신은 표기법 '(...) $'배우고을 사용한다 : F = xxxx.input과 한 줄이 포함 된 파일 xxxx.input로, 맥 OS X에서 실행

FileName1=$(head -n1 $f | awk -F/ '{print $NF}' | sed 's/\"//') 

이다

/var/ftp/pub/faxes/myfile.txt 
/var/ftp/pub/faxes/myfile.txt.pdf 
txt 

추적 출력 ('bash는 -x') : 그 '/some/where/myfile.txt', 스크립트가 생성 말한다

+ f=xxxx.input 
+ PDF=.pdf 
++ head -n 1 xxxx.input 
++ sed 's/\"//' 
++ awk -F/ '{print $NF}' 
+ FileName1=myfile.txt 
++ head -n 1 xxxx.input 
++ awk -F/ '{print $NF}' 
++ sed 's/\"//' 
+ FileName2=myfile.txt 
++ awk -F/ '{print $NF}' 
++ head -n 1 xxxx.input 
++ sed 's/\"//' 
+ FileName3=myfile.txt 
++ basename myfile.txt 
+ FileName=myfile.txt 
++ echo myfile.txt 
++ awk -F . '{print $NF}' 
+ Ext=txt 
++ basename myfile.txt 
+ FileName=myfile.txt 
+ oFileName=/var/ftp/pub/faxes/myfile.txt 
++ basename myfile.txt 
+ FileName=myfile.txt 
+ NewFile=/var/ftp/pub/faxes/myfile.txt.pdf 
+ echo /var/ftp/pub/faxes/myfile.txt 
/var/ftp/pub/faxes/myfile.txt 
+ echo /var/ftp/pub/faxes/myfile.txt.pdf 
/var/ftp/pub/faxes/myfile.txt.pdf 
+ echo txt 
txt 

당신 당신이 실제로 사용하고있는 것을 보여줄 필요가 있습니다. 'bash -x'는 문제가 어디에 있는지를 잘 보여줄 수 있습니다. 재현 할 수 없습니다.

+0

조나단, 답장을 보내 주셔서 감사합니다. 여기서 다른 도움을 얻을 수있는 정보는 무엇입니까? –

+0

+ PDF = .PDF + 파일 이름 1 = $ 'faxtest.txt의 \ r에' + FileName2 = $ 'faxtest.txt의 \ r에' + 파일 이름 3 = $ 'faxtest.txt의 \ r에' ++ 기본 이름을 $ 'faxtest. txt \ r ' + FileName = $'faxtest.txt \ r ' ++ echo $'faxtest.txt \ r ' ++ awk -F. 'File name = $'faxtest.txt \ r ' + oFileName = $'/ var/faxtest.txt \ r 'Ext = $'txt \ r ' ++ 기본 이름'faxtest.txt \ r ' + ftp/pub/faxes/faxtest.txt \ r ' ++ basename $'faxtest.txt \ r ' + FileName = $'faxtest.txt \ r ' + NewFile = $'/ var/ftp/pub/faxes/faxtest.txt \ r.pdf ' + echo $'/ var/ftp/pub/faxes/faxtest \ r ' /var/ftp/pub/faxes/faxtest.txt + echo $'/ var/ftp/pub/faxes/faxtest. txt \ r.pdf ' .pdf/ftp/pub/faxes/faxtest.txt –

+2

내 문제는 변수 $ FileName이 \ r 문자로 채워지는 것 같습니다. –