脚本中的别名

时间:2010-08-06 14:26:25

标签: linux bash unix

在linux中,如果我在一个包含别名的脚本中放入一个命令,我发现它没有被扩展。我该如何解决这个问题?我正在使用bash。

3 个答案:

答案 0 :(得分:4)

根据TLDP page about aliases,您需要在代码中使用行shopt -s expand_aliases来扩展别名。下面的例子产生了预期的输出,但没有shopt线它只打印“my_ls:command not found”:

#!/bin/bash

shopt -s expand_aliases
alias my_ls='ls -lrt'
echo "Trying my_ls"
my_ls
exit

答案 1 :(得分:1)

如果希望shell别名在脚本中可用,则必须手动包含它们。如果在~/.bashrc中定义了它们,请添加一行

. ~/.bashrc

在脚本中的#!/bin/sh行之后。这将在脚本的上下文中执行.bashrc的内容。

答案 2 :(得分:0)

启用posix模式(例如将bash调用为sh或使用命令(set -o posix) 2>/dev/null && set -o posix)应该可以解决问题。

即便如此,请注意别名在解析时会进行扩展,并且解析和执行之间的顺序定义不明确。例如

alias foo=echo; foo bar

{
    alias foo=echo
    foo bar
}

将尝试运行foo,因为别名尚未在解析时定义。此外,有些shell在执行任何shell之前解析eval.(source)的整个输入。

因此,在脚本中使用别名的唯一可移植且可靠的方法是定义它们,然后eval.使用它们的代码。