如何在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
答案 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)
单词<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中的关键字,因此您不能将其用作标识符。
当您从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