在shell脚本中使用别名?

时间:2013-04-12 09:45:39

标签: shell

我在样本shell脚本中定义的别名不起作用。我是Linux Shell Scripting的新手。 下面是示例shell文件

#!/bin/sh

echo "Setting Sample aliases ..."
alias xyz="cd /home/usr/src/xyz"
echo "Setting done ..."

执行此脚本时,我可以看到回显消息。但是如果我执行alias命令,我会看到以下错误

xyz: command not found
我错过了什么吗?

7 个答案:

答案 0 :(得分:37)

来源您的脚本,请勿执行./foo.shsh foo.sh

如果您执行这样的脚本,它将在子shell中运行,而不是您当前的。

source foo.sh  

适合你。

答案 1 :(得分:17)

您需要设置一个特定选项,expand_aliases

 shopt -s expand_aliases

例如:

# With option
$ cat a
#!/bin/bash
shopt -s expand_aliases
alias a="echo b"
type a
a
$ ./a
a is aliased to 'echo b'
b

# Without option
$ cat a
#!/bin/bash
alias a="echo b"
type a
a

$ ./a
./a: line 3: type: a: not found
./a: line 4: a: command not found

cf:https://unix.stackexchange.com/a/1498/27031https://askubuntu.com/a/98786/127746

答案 2 :(得分:3)

采购脚本 source script.sh

./script.sh将在子shell中执行,所做的更改仅适用于子shell。一旦命令终止,子shell就会进行更改。


或者

HACK:只需在shell上运行以下命令,然后执行脚本。

alias xyz="cd /home/usr/src/xyz"
./script.sh

to unalias在shell提示符下使用以下

unalias xyz 

答案 3 :(得分:1)

如果在脚本中执行它,则在脚本完成执行时别名将结束。

如果您希望它是永久性的:

您的别名已明确定义,但您必须将其存储在~/.bashrc中,而不是存储在shell脚本中。

将其添加到该文件,然后使用. .bashrc来源 - 它将加载文件,以便可以使用别名。

如果您希望仅在当前会话中使用它:

只需在控制台提示符下写一下。

$ aa
The program 'aa' is currently not installed. ...
$ 
$ alias aa="echo hello"
$ 
$ aa
hello
$ 

另外:从Kent answer我们可以看到source source your_file shell script。在这种情况下,您不需要使用{{1}},只需要普通文件即可。

答案 4 :(得分:0)

如果您在提示符下调用别名,则别名必须位于.profile文件中,而不是在脚本中。

如果在脚本中添加了别名,则必须在脚本中调用它。

在尝试运行内部具有别名的脚本时,源文件是正确的答案。

source yourscript.sh

答案 5 :(得分:0)

将别名放入文件调用〜/ .bash_aliases中,然后在许多发行版中,它将自动加载,而无需手动运行source命令来加载它。

答案 6 :(得分:0)

您可以使用以下命令。

shopt -s expand_aliases

source ~/.bashrc

eval $command