【问题标题】:Script doesn't work when called from another directory从另一个目录调用时脚本不起作用
【发布时间】:2014-07-22 15:00:59
【问题描述】:

不太清楚如何正确表达,但如果我在它所处理的文件目录中运行我的脚本,一切都很好。如果我将脚本指向另一个目录中的文件,它将失败。 我确定这是某种路径扩展之类的,但我似乎无法让它发挥作用。

这是 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

例如,如果我将 $1 放在引号或 fname 中,错误会发生变化,但如果我从工作目录中调用它,则脚本可以完美运行。

我知道我遗漏了一些明显的东西,但我就是想不通。感谢您的帮助。

【问题讨论】:

    标签: fontforge


    【解决方案1】:

    我对 fontforge 一无所知,但语法看起来有点类似于 shell,所以我会试一试:

    变量名中的空格是否有问题?如果您从目录中运行脚本,则目录名称只是./,没有空格。但是,如果您从其他地方运行它,则目录名称为/home/akovia/Fonts_Other/Al Fresco Bold,其中包含空格。尝试引用脚本中所有变量的每次出现?

    编辑:只是快速浏览了语言教程,并没有提到任何空格问题。

    这是另一个想法:如果您不在目录中,那么您的 fname 变量不仅包含字体名称(它还包含目录名称)。尝试以某种方式删除多余的信息。

    【讨论】:

    • 我打赌你是对的。我从没想过 fname 也包含路径。完全有道理。不幸的是我不知道如何修改它。我还在寻找一种通过 sed 解析文件名的方法,这样我也可以提取正确的姓氏,但我不知道如何将 bash/shell 命令集成到脚本中。我认为这是回答。谢谢你!
    • 我在文档中注意到您可以使用 python 和这种语言编写脚本。如果您使用 python,这很简单:os.path.basename(fname),所以这可能是最简单的解决方案。
    • 我从文档中找到了可以使用的正确语法(:t 给出了结尾),但我仍然无法更进一步。该脚本是从设置一些 ENV 变量的 bash 脚本调用的,我想我只是迷失了让它们正确地相互交谈。不过我仍然在做。
    猜你喜欢
    • 2023-01-31
    • 2019-04-13
    • 2020-06-20
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多