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

如何在OSX上的Ruby脚本中使用shell中的Bash别名?,ruby,bash,alias,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 我想: 从别名数组中选择随机外壳别名。(这些别名是我可以在shell中使用的别名,如my.b

如何在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
我想:

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

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


快速查看Bash手册页显示:

除非使用
shopt
设置了
expand_alias
shell选项(请参见下面shell内置命令下的
shopt
说明),否则shell不交互时,别名不会展开

快速搜索“shell shopt expand_别名”显示了大量点击


请参见“”、“”和“”。

快速查看Bash手册页,显示:

除非使用
shopt
设置了
expand_alias
shell选项(请参见下面shell内置命令下的
shopt
说明),否则shell不交互时,别名不会展开

快速搜索“shell shopt expand_别名”显示了大量点击


请参阅“”、“”和“”。

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

别名是一个关键字,决不能用作变量名或方法名

  • 别名在Ruby中是一个关键字,因此不能将其用作标识符

  • 当您从Bash执行源xxxx时,它将文件“xxxx”解释为Bash程序。您的文件是Ruby程序,因此无法获取源代码

  • 别名在Ruby中是一个关键字,因此不能将其用作标识符

  • 当您从Bash执行源xxxx时,它将文件“xxxx”解释为Bash程序。您的文件是Ruby程序,因此无法获取源代码


  • 事实证明,解决方案是在Ruby脚本中以交互式shell的形式运行shell命令(这样
    .bashrc
    就可以获得源代码,并且shell的环境可以使用别名):


    事实证明,解决方案是在Ruby脚本中以交互式shell的形式运行shell命令(这样
    .bashrc
    就可以获得源代码,并且shell的环境可以使用别名):


    更新:我说不能从ruby代码调用alias是错误的。请参阅我的问题以获得答案:更新:我说您不能从ruby代码调用alias是错误的。请参阅我的问题以获取答案:
    ul: command not found
    
    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