如何在 OS X 上的 Ruby 脚本中使用来自 shell 的 Bash 别名?
How to use Bash aliases from a shell in a Ruby script on OS X?
如何在 Ruby 脚本中从我的 Bash shell 执行别名?
代码如下:
aliases = [ 'ul', 'ur', 'dl', 'dr', 'll', 'rr', 'up', 'down', 'big', 'cen' ]
while true
a = aliases.sample
`#{a}`
puts `figlet -f doh "#{a}"`
end
我愿意:
- select 来自
aliases
数组的随机 shell 别名。 (这些别名是我可以在 .bashrc
中定义的 shell 中使用的别名),
- 执行 selected 别名,
- 使用
figlet
将 selected 别名的名称打印到终端屏幕。
但是:
当我执行 ./mysciprt
我得到:
ul: command not found
Bash 手册页的快速检查显示:
Aliases are not expanded when the shell is not interactive, unless the expand_aliases
shell option is set using shopt
(see the description of shopt
under SHELL BUILTIN COMMANDS below).
快速搜索 "shell shopt expand_aliases" 显示了一堆匹配项。
参见“Difference between .bashrc and .bash_profile", "Why aliases in a non-interactive Bash shell do not work", "Why doesn't my Bash script recognize aliases?" and "Non-interactive shell expand alias”。
alias
是关键字,绝不能用作变量名或方法名。
单词alias
是Ruby中的关键字,因此您不能将其用作标识符。
当您从 Bash 执行 source xxxx
时,它会将文件 "xxxx" 解释为 Bash 程序。您的文件是一个 Ruby 程序,因此无法找到它。
事实证明,解决方案是 运行 Ruby 脚本中的 shell 命令作为交互式 shell(因此 .bashrc
来源和别名可用于 shell 的环境):
aliases = [ 'ul', 'ur', 'dl', 'dr', 'll', 'rr', 'up', 'down', 'big', 'cen' ]
while true
a = aliases.sample
`bash -ic '#{a}'`
puts `figlet -f doh "#{a}"`
end
如何在 Ruby 脚本中从我的 Bash shell 执行别名?
代码如下:
aliases = [ 'ul', 'ur', 'dl', 'dr', 'll', 'rr', 'up', 'down', 'big', 'cen' ]
while true
a = aliases.sample
`#{a}`
puts `figlet -f doh "#{a}"`
end
我愿意:
- select 来自
aliases
数组的随机 shell 别名。 (这些别名是我可以在.bashrc
中定义的 shell 中使用的别名), - 执行 selected 别名,
- 使用
figlet
将 selected 别名的名称打印到终端屏幕。
但是:
当我执行
./mysciprt
我得到:ul: command not found
Bash 手册页的快速检查显示:
Aliases are not expanded when the shell is not interactive, unless the
expand_aliases
shell option is set usingshopt
(see the description ofshopt
under SHELL BUILTIN COMMANDS below).
快速搜索 "shell shopt expand_aliases" 显示了一堆匹配项。
参见“Difference between .bashrc and .bash_profile", "Why aliases in a non-interactive Bash shell do not work", "Why doesn't my Bash script recognize aliases?" and "Non-interactive shell expand alias”。
alias
是关键字,绝不能用作变量名或方法名。
单词
alias
是Ruby中的关键字,因此您不能将其用作标识符。当您从 Bash 执行
source xxxx
时,它会将文件 "xxxx" 解释为 Bash 程序。您的文件是一个 Ruby 程序,因此无法找到它。
事实证明,解决方案是 运行 Ruby 脚本中的 shell 命令作为交互式 shell(因此 .bashrc
来源和别名可用于 shell 的环境):
aliases = [ 'ul', 'ur', 'dl', 'dr', 'll', 'rr', 'up', 'down', 'big', 'cen' ]
while true
a = aliases.sample
`bash -ic '#{a}'`
puts `figlet -f doh "#{a}"`
end