在shell脚本中使用别名?

在shell脚本中使用别名?,shell,Shell,示例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

我错过什么了吗

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

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

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

将其添加到该文件中,然后使用
对其进行源代码转换。bashrc
-它将加载文件,以便可以使用alias

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

只需在控制台提示符中写入即可

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

另外:从中我们可以看到,您也可以通过
将您的_文件
源文件
源文件
。在这种情况下,您不需要使用
shell脚本
,只需要一个普通文件就可以了。

为脚本寻找源代码。sh

/script.sh
将在子shell中执行,所做的更改仅应用于子shell。一旦命令终止,子shell将继续,更改也将继续


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

alias xyz="cd /home/usr/src/xyz"
./script.sh
要使用unalias,请在shell提示符下使用以下命令

unalias xyz 

source您的脚本,不要像执行
/foo.sh
sh foo.sh

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

source foo.sh  

将对您有效。

您需要设置一个特定的选项来执行此操作,
展开别名

 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:并且

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

如果在脚本中放置别名,则必须在脚本中调用它

Source尝试运行包含别名的脚本时,该文件是正确答案

source yourscript.sh

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

您可以使用以下命令

shopt -s expand_aliases

source ~/.bashrc

eval $command

我不想把它储存在。bashrc。我需要此别名仅对当前会话有效。然后只需在控制台提示中写入即可。如果在脚本中执行,则在脚本完成执行时别名将结束。如果必须始终设置10个别名,则在控制台提示中写入可能会很耗时。不管怎么说,从肯特answer找到脚本对我来说很有效。是的,
source
,我不知道。我们可以从中得到的是,您甚至可以存储一个包含别名的普通文件(而不是.sh),然后在需要时对其进行寻源。执行
alias xyz=“cd/home/usr/src/xyz”
如何添加到
~/.bashrc
?对不起,对我来说,
$alias
$unalias
$source
毫无意义。为什么它们是变量?除非您对此进行解释,否则我将使用downvote.$来表示命令行中的提示(就像上面的一些答案一样)。此外,我不认为这会鼓励用户仅仅因为不理解内容就否决这些内容。这种方法的问题是所有脚本变量都会侵入您的环境。这不是你想要的!别名是缩短命令的一种方式。(它们仅在交互式shell中使用,而不在脚本中使用-这是脚本和交互式shell之间极少数的区别之一。)