我在样本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
如果您在脚本中执行它,则别名将在脚本执行完成时结束。
如果您希望它是永久的:
您的别名定义良好,但您必须将其存储在 中~/.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,只需一个普通文件即可。
| 归档时间: |
|
| 查看次数: |
39133 次 |
| 最近记录: |