如何让ruby的`system`调用知道我的`.bash_profile`别名?

时间:2015-02-17 06:16:03

标签: ruby .bash-profile

我希望能够在ruby程序中调用我的一个快捷方式(即别名)。换句话说,我想要

system('cpl')

相当于写作

cd ~/Documents/CPlusPlus

在命令行,因为我的.bash_profile包含行

alias cpl="cd ~/Documents/cplusplus"

我在Mac OSX上,虽然我的.bash_profile住在通常的地方(~),但我可能会在任何旧文件夹中写入ruby。我使用的是Ruby 2.2.0,它位于/usr/local/bin/ruby

2 个答案:

答案 0 :(得分:6)

以下内容应该有效:

system("bash -ci 'cpl'")

c开关告诉"执行" cpl作为命令而不是搜索文件。 i将bash变为交互模式,更重要的是加载.bashrc文件。

编辑:确保在.bashrc文件中定义别名。每个新shell初始化时都会加载此文件。 .bash_profile仅在每次用户登录时加载。查看更多here

答案 1 :(得分:0)

From source docs:

  

从当前shell上下文中的filename参数读取并执行命令。

From shopt -s expand_aliases docs

  

如果设置,则会扩展别名。对于交互式shell,默认情况下启用此选项。

您使用非交互式shell,因此需要执行以下附加步骤:

system %(
  source ~/.bash_profile
  shopt -s expand_aliases
  cpl
)