2014-07-22 1 views
2

어떻게 제대로 말할지는 모르겠지만 작동하는 파일 디렉토리에서 스크립트를 실행하면 모두 정상입니다. 스크립트가 다른 디렉토리의 파일을 가리키면 실패합니다. 경로 확장 또는 뭔가 일종의 확신 해요,하지만 난 그냥 작동하도록 만들 수 없습니다.다른 디렉토리에서 호출 할 때 스크립트가 작동하지 않습니다.

다음은 fontforge 스크립트입니다.

#!/usr/bin/fontforge 
Open($1) 
fname = ($1:r) 
Print(fname) 
SetTTFName(0x409,2,"") 
SetFontNames(fname,fname,fname,"") 
Print($fullname) 
Print($familyname) 
Print(GetTTFName(0x409,2)) 
Generate($1:r + ".ttf") 

과 실패 명령을

./fix_font_names ~/Fonts_Other/* 

오류를 :

SetFontNames: Invalid character in PostScript name token (probably fontname): : /home/akovia/Fonts_Other/Al Fresco Bold 
Called from... 
./fix_font_names: line 7 

예를 들어 내가 따옴표 또는 FNAME에서 $ 1 넣을 경우 오류가 변경할 수 있지만, 스크립트가 완벽하게 작동 만약 내가 작업 디렉토리에서 그것을 호출합니다.

나는 명백한 것을 놓치고있는 것을 알고 있지만, 나는 그것을 알아낼 수 없다. 어떤 도움을 주셔서 감사합니다.

그것이 변수 이름에 공백이 문제가 될 수 :

답변

0

나는 샷을해야합니다 나는 폰트 포지에 대해 아무것도 몰라하지만 구문은 그래서 쉘 다소 비슷? 디렉토리 내에서 스크립트를 실행하면 디렉토리 이름은 공백없이 ./이됩니다. 그러나 다른 곳에서 실행하면 디렉토리 이름은 공백을 포함하는 /home/akovia/Fonts_Other/Al Fresco Bold입니다. 스크립트에서 모든 변수의 모든 항목을 인용 해보십시오.

편집 : 방금 언어 자습서를 빨리 ​​익혔으며 공백과 관련된 문제는 언급하지 않았습니다.

다른 생각 : 만약 당신이 디렉토리에 없다면, fname 변수는 폰트 이름뿐만 아니라 디렉토리 이름도 포함하고 있습니다. 여하튼 추가 정보를 제거하십시오.

+0

나는 틀렸다고 확신합니다. 나는 경로를 포함하는 fname에 대해서 결코 생각하지 못했다. 완벽하게 이해합니다. 불행히도 나는 그것을 어떻게 수정해야할지 모른다. 또한 sed를 통해 파일 이름을 구문 분석 할 수있는 방법을 찾고 있었으므로 적절한 성을 추출 할 수 있었지만 bash/shell 명령을 스크립트에 통합하는 방법에 대해서는 분실했습니다. 나는 이것을 대답했다고 생각한다. 너는 나의 감사를 가지고있다! – akovia

+0

필자는 문서에서이 언어뿐 아니라 파이썬으로 스크립트 할 수 있다는 것을 알아 차렸다. 파이썬을 사용한다면 그것은 간단합니다 :'os.path.basename (fname)', 그래서 아마도 가장 쉬운 해결책이 될 것입니다. – dshepherd

+0

docs에서 사용하는 적절한 구문을 발견했습니다. (: t는 꼬리를 제공합니다) 그러나 나는 아직 더 많은 것을 얻을 수 없었습니다. 이 스크립트는 ENV 변수를 설정하는 bash 스크립트에서 호출되며, 나는 그들이 서로 제대로 대화하는 것을 놓치고 있다고 생각합니다. 나는 아직도 그것에있다. – akovia

관련 문제