如何让ruby的`system`调用知道我的`.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

来自source文档:

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

来自shopt -s expand_aliases docs :

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

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

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

以下应该有效:

 system("bash -ci 'cpl'") 

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

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