我有一条规则,尝试在构建过程中下载参考书目,但我更希望有选项让其在下载失败时软失败,因为我可能拥有上次下载的最新副本。我尝试了以下脚本(将 localhost 替换为 ocalhost 以避免 SE 过滤器),但存在以下两个问题:
- 我收到错误“很抱歉,但为‘zoterobib’任务的参数‘conditionalFail’设置的默认值(引用位于‘C:\Program iles\arara\rules’的‘zoterobib.yaml’文件)在规则上下文中有一个不可用的变量/方法:‘base’”
- 如果我删除 @{base} 引用,规则将可靠且无声地失败(即,|| ... 似乎没有被执行)
- 如果我将 || ... 直接添加到命令行,它会按照我的预期运行,但随后它会总是软失败,我希望这是一个明确的选择
。
!config
# Pull bibliography from zotero as part of build
# author: Emiliano Heyns
# last edited by: eeh, Dec 2nd 2013
# requires arara 3.0+
#
# Sample usage
#
# % arara: zoterobib
# % arara: zoterobib: {format: biblatex}
#
# for windows, use http://www.confusedbycode.com/curl/#downloads
identifier: zoterobib
name: ZoteroBib
commands:
- <arara> @{ isWindows( "cmd /c ", "" ) } curl --connect-timeout 1 -s -o "@{base}.bib" "http://ocalhost:@{port}/better-bibtex/collection?@{collection}.@{format}" @conditionalFail
arguments:
- identifier: base
flag: <arara> @{parameters.base}
default: <arara> @{getBasename(file)}
- identifier: port
flag: <arara> @{parameters.port}
default: 23119
- identifier: format
flag: <arara> @{parameters.format}
default: biblatex
- identifier: collection
flag: <arara> @{parameters.collection}
- identifier: continue
flag: <arara> @{parameters.continue}
- identifier: conditionalFail
default: <arara> isTrue(@continue, "|| (echo could not download @{base}.bib && exit 0)")
答案1
失败的原因@{base}
是,对于参数,范围仅限于映射parameters
。这意味着一个参数对另一个参数不可用。我仍然在考虑如何评估参数以及按什么顺序评估。作为一种解决方法,我建议您保留相关的两个参数(因为arara
只允许规则上下文中预期的指令参数),但只使用映射中的两个值处理一个参数(好吧,如果我理解了你想要实现的目标。:)
我可能也错了)。
现在,关于你问题的第二部分:出于安全原因,arara
不允许子 shell 调用,并且它执行的所有内容都被困在 shell 沙箱中(从技术上讲,它不是沙箱,但环境受到限制)。因此,命令链(通过重定向/管道、逻辑路径)不会具有所需的行为。抱歉。:(