gpt4 book ai didi

rake - 在 rake 中调用 bash 别名

转载 作者:行者123 更新时间:2023-12-04 17:40:32 27 4
gpt4 key购买 nike

我的 .bashrc 中有以下命令:

alias mfigpdf='for FIG in *.fig; do fig2dev -L pdftex "$FIG" "${FIG%.*}.pdftex"; done;
for FIG in *.fig; do fig2dev -L pstex_t -p "${FIG%.*}.pdftex" "$FIG" "${FIG%.*}.pdftex_t"; done'

我想在我的 Rakefile 中执行“mfigpdf”命令:
desc "convert all images to pdftex (or png)"
task :pdf do
sh "mfigpdf"
system "mfigpdf"
end

但是这些任务都没有奏效。我可以将命令复制到 rakefile 中,然后将其插入 shellscript 文件,但我复制了代码。

谢谢你的帮助!

马蒂亚斯

最佳答案

这里存在三个问题:

  • 您需要 source ~/.profile ,或存储别名的任何地方,在子shell中。
  • 您需要调用shopt -s expand_aliases在非交互式 shell 中启用别名。
  • 您需要在与实际调用别名不同的行上执行这两项操作。 (出于某种原因,设置 expand_aliases 不适用于同一行输入的别名,即使您使用分号。参见 this answer。)

  • 所以:
    system %{
    source ~/.profile
    shopt -s expand_aliases
    mfigpdf
    }

    应该管用。

    但是,我建议使用 bash 函数而不是别名。所以你的 bash 将是:
    function mfigpdf() {
    for FIG in *.fig; do
    fig2dev -L pdftex "$FIG" "${FIG%.*}.pdftex"
    done
    for FIG in *.fig; do
    fig2dev -L pstex_t -p "${FIG%.*}.pdftex" "$FIG" "${FIG%.*}.pdftex_t"
    done
    }

    还有你的 ruby :
    system 'source ~/.profile; mfigpdf'

    该函数的行为方式与交​​互式 shell 中的别名基本相同,并且在非交互式 shell 中更容易调用。

    关于rake - 在 rake 中调用 bash 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4978564/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com