Automator - 处理将从 Applescript 传递到 Shell Script 的路径上的空格

Automator - dealing with spaces on paths that will be passed from Applescript to Shell Script

我有一个别名形式的 AppleScript 处理路径并将它们转换为 posix。

这些路径将由 shell 脚本在此自动化工作流程的第二步中处理。

问题是路径包含 spaces.

我不知道如何处理这个,所以我有这个子程序来删除任何 space 并将其替换为 \

on replaceChars(this_text, search_string, replacement_string)
    set saveTID to AppleScript's text item delimiters
    set AppleScript's text item delimiters to the search_string
    set the item_list to every text item of this_text
    set AppleScript's text item delimiters to the replacement_string
    set this_text to the item_list as string
    set AppleScript's text item delimiters to saveTID
    return this_text
end replaceChars

Applescript 部分是我做的

-- convert the path from the alias form to posix
set fileInputPosix to (the POSIX path of thePath)

-- replace " " with "\ "
set quotedForm to replaceChars(fileInputPosix, space, "\ ")

此时路径似乎没问题,比如

'/Users/myUser/Desktop/my\ video\ file.png'

但是当我将此路径传递给 shell 脚本时,它不会接受。

只需引用shell行中的路径并删除搜索和替换部分

/usr/local/bin/ffmpeg -I "" -vf "select=eq(n\,)" -vframes 1 ""

您可以引用整个字符串或使用 quoted form of 智能地引用字符串,您也可以尝试转义单个字符,但在这种情况下,您需要转义每个转义字符,例如:

quoted form of “/Users/myUser/Desktop/my video file.png”
“/Users/myUser/Desktop/my\ video\ file.png”

在与您的其他 非常相似的情况下,您似乎正在创建一个不需要解决的问题,方法是选择使用 AppleScript 操作来接收最终被传递到的文件路径shell 脚本操作。这样做的唯一原因似乎是让 AppleScript“处理”文件路径作为 alias 文件引用,将它们转换为 posix 路径以便将它们用作 command-line 参数在 shell 脚本中。

这完全没有必要。即使您出于其他原因决定需要 AppleScript,Automator 在操作之间传递不兼容的数据类型时,通常会将它们转换为适当的格式,因此 AppleScript alias 引用可以愉快地发送到 shell 脚本操作,它将自动接收它们作为 posix 文件路径:

在上面的屏幕截图中,您可以看到我在任何阶段都没有执行任何处理或操作,并且这两个脚本操作 return 语言的正确文件路径。

结论

▸ 删除您的 AppleScript 操作,只需将文件直接发送到 shell 脚本,as arguments,然后附上您的 command-line 引号中的参数变量 @vadian 已经证明。

▸ 如果您出于其他原因使用 AppleScript,那很好。只需保留 alias 引用原样,然后将它们发送到 shell 脚本,并按照刚才描述的方式处理它们。


从另一个方向发送的文件路径——从 shell 脚本到 AppleScript——不会,然而,神奇地变成 alias 参考资料。 posix 路径只不过是一段文本,并且由于 AppleScript 可以完美地处理文本,所以没有人期望它试图将其强制转换为不同的内容;如有必要,这需要由脚本编写者明确完成。