在shell脚本中使用别名?

Nar*_*ain 18 shell

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

#!/bin/sh

echo "Setting Sample aliases ..."
alias xyz="cd /home/usr/src/xyz"
echo "Setting done ..."
Run Code Online (Sandbox Code Playgroud)

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

xyz: command not found
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Ken*_*ent 40

来源你的脚本,不要像./foo.sh或那样执行sh foo.sh

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

source foo.sh  
Run Code Online (Sandbox Code Playgroud)

会对你有用.


Adr*_*sbe 20

您需要设置一个特定选项来执行此操作expand_aliases:

 shopt -s expand_aliases
Run Code Online (Sandbox Code Playgroud)

例:

# 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
Run Code Online (Sandbox Code Playgroud)

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


fed*_*qui 1

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

如果您希望它是永久的:

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

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

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

只需将其写入控制台提示符即可。

$ aa
The program 'aa' is currently not installed. ...
$ 
$ alias aa="echo hello"
$ 
$ aa
hello
$ 
Run Code Online (Sandbox Code Playgroud)

另外:从肯特的回答我们可以看到你也可以source通过source your_file. 在这种情况下,您不需要使用 a shell script,只需一个普通文件即可。