为什么用bash命令忽略别名?

时间:2019-01-04 16:20:48

标签: linux bash ubuntu alias sudo

我的操作系统是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)并不是一种选择。

1 个答案:

答案 0 :(得分:0)

默认情况下,仅在 interactive shell中启用

Alias。当您使用bash -c '...'启动shell时,它不是交互式的。

改为使用函数:bash -c 'foo() { echo bar; } && foo'可以正常工作。