Linux Shell中的别名无效

时间:2019-06-21 14:41:48

标签: linux shell

我想运行一些脚本。

需要别名来修改命令。

但它似乎无效。

例如:

root@161310ea476b:/tmp# cat test.sh
#!/bin/bash
ls /tmp
root@161310ea476b:/tmp#
root@161310ea476b:/tmp# ./test.sh
test.sh
root@161310ea476b:/tmp# . test.sh
test.sh

现在我使用了别名

root@161310ea476b:/tmp# shopt -s expand_aliases
root@161310ea476b:/tmp# alias ls="ls -al"

有效。

 root@161310ea476b:/tmp# . test.sh
 total 12
 drwxrwxrwt  2 root root 4096 Jun 21 09:41 .
 drwxr-xr-x 21 root root 4096 Jun 21 09:39 ..
 -rwxr-xr-x  1 root root   22 Jun 21 09:41 test.sh

,但是这种情况不起作用。别名似乎无效。

 root@161310ea476b:/tmp# ./test.sh
 test.sh
 root@161310ea476b:/tmp#

如何解决此问题? 谢谢。

1 个答案:

答案 0 :(得分:0)

用于执行脚本的子shell不会继承别名。

请查看此处提供的答案: Aliases in subshell

或者,您可以将别名创建为函数(而不是别名),将其导出,然后运行脚本。

创建函数...

function ls() {
    /bin/ls -al
}

...导出它...

export -f ls

...并运行脚本

. ./test.sh

当然,不要忘记您已经创建了一个函数ls。 (注意:只要您从---导出的外壳以及其中的任何子外壳处于打开状态,它就应该存在。)