【问题标题】:Passing shell result to another shell command?将shell结果传递给另一个shell命令?
【发布时间】:2011-09-20 14:34:09
【问题描述】:

刚刚在这里学习 Automator,但我正在尝试对文件 (blah.rtf->blah.mobi) 运行转换命令,我想获取生成的 .mobi 文件并在其上运行另一个 shell 命令在不同的动作中。是这样,还是有办法将其设置为第二个变量并在同一操作中对其进行操作?

这是我目前的代码(使用 Calibre 命令行工具):

第一个动作:

for f in "$@"
do
    ebook-convert "$f" "$f".mobi
done    

我想传递那个 .mobi 文件来运行:

for f in "$@"
do
    mv "$f" $(echo "$f" | cut -d'.' -f1).mobi
done

有什么想法吗?谢谢!

【问题讨论】:

  • 非常密切相关(尽管略有不同):Using awk to remove one of multiple file extensions
  • 您有什么问题?您的命令是正确的,并且是我在这里能找到的唯一问题的合理答案。 (使用变量替换会更有效,但这与您的主要问题无关。mv "$f" "${f%.*}".mobi
  • 哦,你当然可以在第一个 for 循环中做任何你想做的事情,而且确实应该这样做。
  • Automator 将修改后的 .mobi 文件传递​​到下一个 shell 命令时存在一些问题。我无法让它重命名,而是出现 Automator 错误。我的猜测是它没有将任何文件传递给第二个 shell 命令,因此对 $@ 和 $f 的引用是无用的。

标签: macos shell automator


【解决方案1】:

为了将转换后的文件传递给后续动作,第一个动作必须输出它们的路径:

for f in "$@"
do
    ebook-convert "$f" "$f".mobi
    echo "$f".mobi
done

但是您可以通过首先创建具有正确名称的文件来使其更简单(正如@tripleee 建议的那样):

for f in "$@"
do
    ebook-convert "$f" "${f%.*}".mobi
    # echo "${f%.*}".mobi  # optional -- uncomment if you need to pass the files on to subsequent actions
done

【讨论】:

    猜你喜欢
    • 2022-11-10
    • 2015-01-08
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多