首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rake中调用bash别名

在rake中调用bash别名
EN

Stack Overflow用户
提问于 2011-02-12 22:24:15
回答 3查看 1.4K关注 0票数 5

我的.bashrc中有以下命令:

代码语言:javascript
复制
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‘命令:

代码语言:javascript
复制
desc "convert all images to pdftex (or png)"
task :pdf do
  sh "mfigpdf"
  system "mfigpdf"
end

但这些任务都没有奏效。我可以只复制rakefile中的命令,将它插入到一个shellscript文件中,但是我有重复的代码。

谢谢你的帮忙!

马蒂亚斯

EN

回答 3

Stack Overflow用户

发布于 2011-03-15 23:06:20

这里有三个问题:

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

所以:

代码语言:javascript
复制
system %{
  source ~/.profile
  shopt -s expand_aliases
  mfigpdf
}

应该行得通。

但是,我建议使用bash函数而不是别名。所以你的bash应该是:

代码语言:javascript
复制
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
}

还有你的红宝石:

代码语言:javascript
复制
system 'source ~/.profile; mfigpdf'

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

票数 5
EN

Stack Overflow用户

发布于 2011-03-13 18:14:17

sh mfigpdf将尝试运行具有该名称的外壳脚本,您必须改用sh -c mfigpdf

为了启用别名扩展和加载~/.bashrc,您还必须使用-i标志强制bash进入“交互式外壳”模式。

代码语言:javascript
复制
sh "bash -ci 'mfigpdf'"

您可以使用bash函数替换别名。函数也是以非交互模式展开的,因此您可以只使用~/.bashrc

代码语言:javascript
复制
sh "bash -c '. ~/.bashrc ; mfigpdf'"
票数 3
EN

Stack Overflow用户

发布于 2011-02-12 22:57:21

你必须源码你的.bashrc来加载别名,但是我认为ruby运行在sh上,不使用source命令,而是使用'.‘我相信这应该能行得通:

`. /path/to/.bashrc `

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4978564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档