This question already has answers here:
Alias doesn't work inside a Bash script
                                
                                    (2个答案)
                                
                        
                                去年关闭。
            
                    
我的操作系统是Ubuntu Linux 18.04(Xubuntu)和bash版本4.4.19

通过输入以下shell命令:


bash -c 'foo="echo bar" && $foo'
bash -c 'alias foo="echo bar" && foo'
alias foo="echo bar" && foo


我得到以下输出:


bar(预期)
bash: foo: command not found(应该使用简单的bar
bar(预期)


我问的原因是因为我有一个复杂的脚本,该脚本使用别名,因此希望以root的身份执行。

我试过了:


sudo bash -c '/path/to/script.sh'


但是,使用自己的别名时脚本将失败。不幸的是,在我想要的情况下,切换到root(sudo -i)并不是一种选择。

最佳答案

默认情况下,仅在交互式Shell中启用别名。使用bash -c '...'启动shell时,它不是交互式的。

改用函数:bash -c 'foo() { echo bar; } && foo'完美工作。

10-07 19:45
查看更多