如何让 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.
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
)
我希望能够从 ruby 程序中调用我的快捷方式之一(即别名)。也就是说,我要
system('cpl')
相当于写作
cd ~/Documents/CPlusPlus
在命令行,因为我的 .bash_profile
包含行
alias cpl="cd ~/Documents/cplusplus"
我在 Mac OSX,虽然我的 .bash_profile
住在常住的地方 (~
),但我可能正在写 ruby in/to 任何旧文件夹。我正在使用位于 /usr/local/bin/ruby
.
以下应该有效:
system("bash -ci 'cpl'")
c
开关告诉 "execute" cpl
作为命令而不是搜索文件。 i
将 bash 转换为交互模式,更重要的是加载 .bashrc
文件。
编辑: 确保在 .bashrc
文件中定义别名。每次新 shell 初始化时都会加载此文件。 .bash_profile
仅在每次用户登录时加载。查看更多 here.
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
)