在shell脚本中使用别名?
示例shell脚本中定义的别名不起作用。我还不熟悉Linux Shell脚本。 下面是示例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 我错过什么了吗 如果在脚本中执行别名,则该别名将在脚本
#!/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之间极少数的区别之一。)