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

How do I make ruby's `system` call aware of my `.bash_profile` aliases?

我希望能够从 ruby 程序中调用我的快捷方式之一(即别名)。也就是说,我要

system('cpl')

相当于写作

cd ~/Documents/CPlusPlus

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

alias cpl="cd ~/Documents/cplusplus"

我在 Mac OSX,虽然我的 .bash_profile 住在常住的地方 (~),但我可能正在写 ruby in/to 任何旧文件夹。我正在使用位于 /usr/local/bin/ruby.

的 Ruby 2.2.0

以下应该有效:

system("bash -ci 'cpl'")

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

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

From source docs:

Read and execute commands from the filename argument in the current shell context.

From shopt -s expand_aliases docs:

If set, aliases are expanded. This option is enabled by default for interactive shells.

您使用的是非交互式 shell,因此需要执行以下额外步骤:

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