我在示例 shell 脚本中定义的别名不起作用。我是 Linux Shell 脚本的新手。下面是示例 shell 文件
#!/bin/sh
echo "Setting Sample aliases ..."
alias xyz="cd /home/usr/src/xyz"
echo "Setting done ..."
在执行此脚本时,我可以看到回显消息。但是如果我执行 alias 命令,我会看到以下错误
xyz: command not found
我错过了什么吗?
我在示例 shell 脚本中定义的别名不起作用。我是 Linux Shell 脚本的新手。下面是示例 shell 文件
#!/bin/sh
echo "Setting Sample aliases ..."
alias xyz="cd /home/usr/src/xyz"
echo "Setting done ..."
在执行此脚本时,我可以看到回显消息。但是如果我执行 alias 命令,我会看到以下错误
xyz: command not found
我错过了什么吗?
源你的脚本,不要执行它像./foo.sh
或sh foo.sh
如果你这样执行你的脚本,它在子 shell 中运行,而不是你当前的。
source foo.sh
会为你工作。
您需要设置一个特定选项来执行此操作,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
参见:https ://unix.stackexchange.com/a/1498/27031和https://askubuntu.com/a/98786/127746
采购脚本 source script.sh
./script.sh
将在子 shell 中执行,所做的更改仅适用于子 shell。一旦命令终止,子外壳程序就会执行,更改也会执行。
HACK:只需在 shell 上运行以下命令,然后执行脚本。
alias xyz="cd /home/usr/src/xyz"
./script.sh
要取消别名,请在 shell 提示符下使用以下命令
unalias xyz
如果您在脚本中执行它,则别名将在脚本完成执行时结束。
如果您希望它是永久性的:
您的别名定义明确,但您必须将其存储在 中~/.bashrc
,而不是 shell 脚本中。
将其添加到该文件中,然后使用. .bashrc
- 它将加载该文件,以便可以使用别名。
如果您希望它仅在当前会话中使用:
只需将其写入控制台提示符即可。
$ aa
The program 'aa' is currently not installed. ...
$
$ alias aa="echo hello"
$
$ aa
hello
$
另外:从肯特的回答中,我们可以看到您也source
可以通过source your_file
. 在这种情况下,您不需要使用 a shell script
,只需一个普通文件即可。
如果您在提示符下调用它,您的别名必须在您的 .profile 文件中,而不是在您的脚本中。
如果您在脚本中放置别名,则必须在脚本中调用它。
尝试运行内部具有别名的脚本时,源文件是正确的答案。
source yourscript.sh
将您的别名放在文件调用中 ~/.bash_aliases 然后,在许多发行版中,它将自动加载,无需手动运行 source 命令来加载它。
您可以使用以下命令。
shopt -s expand_aliases
source ~/.bashrc
eval $command