如何在OS X上的Ruby脚本中使用shell中的Bash别名?

时间:2015-11-03 22:50:35

标签: ruby bash alias

如何在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

我想:

  • aliases数组中选择一个随机shell别名。 (这些别名是我可以在我的.bashrc中定义的shell中使用的别名),
  • 执行选定的别名
  • 使用figlet将所选别名的名称打印到终端屏幕。

然而:

  • 当我执行./mysciprt时,我得到:

    ul: command not found
    

4 个答案:

答案 0 :(得分:3)

快速检查Bash手册页显示:

  

如果shell不是交互式的,则不会展开别名,除非使用expand_aliases设置shopt shell选项(请参阅下面的SHELL BUILTIN命令下的shopt说明)。

快速搜索" 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?"和" Non-interactive shell expand alias"。

答案 1 :(得分:0)

alias是一个关键字,绝不能用作变量名或方法名。

答案 2 :(得分:0)

  1. 单词<link href='https://fonts.googleapis.com/css?family=PT+Serif|Fjalla+One|Open+Sans:400italic,600italic,300,400,300italic' rel='stylesheet' type='text/css'> <link href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css' rel='stylesheet' type='text/css'> <br /> <div class="row"> <div class="col-xs-12 overview-findoutmore">FIND OUT MORE <div class="right-angle-bracket right-angle-bracket-rotate90"></div> </div> </div>是Ruby中的关键字,因此您不能将其用作标识符。

  2. 当您从Bash执行alias时,它会将文件“xxxx”解释为Bash程序。您的文件是Ruby程序,因此无法获取。

答案 3 :(得分:0)

事实证明,解决方案是将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