【问题标题】:using alias in shell script? [duplicate]在 shell 脚本中使用别名? [复制]
【发布时间】:2013-04-12 09:45:38
【问题描述】:

我在示例 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 中使用,而不在脚本中使用——这是脚本和交互式 shell 之间为数不多的区别之一。)

标签: shell


【解决方案1】:

source你的脚本,不要像./foo.shsh foo.sh那样执行它

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

source foo.sh  

对你有用。

【讨论】:

  • 这种方法的问题是所有的脚本变量都会侵入你的环境。这不是你想要的!
【解决方案2】:

你需要设置一个特定的选项,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

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

【讨论】:

    【解决方案3】:

    采购脚本 source script.sh

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


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

    alias xyz="cd /home/usr/src/xyz"
    ./script.sh
    

    在 shell 提示符下使用以下命令来取消别名

    unalias xyz 
    

    【讨论】:

    • 以及如何执行alias xyz="cd /home/usr/src/xyz"添加到~/.bashrc
    • 对不起,但对我来说 $alias$unalias$source 毫无意义。为什么它们是变量?除非你解释,否则我会投反对票。
    • $ 仅用于表示命令行中的提示符(如上面的一些答案)。此外,我不认为 SO 会鼓励用户仅仅因为他们不理解而对事物投反对票。
    【解决方案4】:

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

    如果您希望它是永久的:

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

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

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

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

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

    另外:从Kent answer我们可以看到你也可以通过source your_filesource它。在这种情况下,您不需要使用shell script,只需一个普通文件即可。

    【讨论】:

    • 我不想将它存储在 .bashrc 中。我需要此别名仅适用于当前会话。
    • 然后把它写在你的控制台提示符中。如果您在脚本中执行它,则别名将在脚本完成执行时结束。
    • 如果我必须一直设置 10 个别名,可能在控制台提示符下写入会很耗时。无论如何采购脚本对我有用。
    • 是的,来自肯特的source 回答成功了——我不知道。我们可以从中得到的是,您甚至可以拥有一个存储别名的普通文件(不是 .sh),然后在您想使用时随时获取它们。
    【解决方案5】:

    如果您在提示符下调用它,您的别名必须在您的 .profile 文件中,而不是在您的脚本中。

    如果您在脚本中添加别名,则必须在脚本中调用它。

    在尝试运行内部具有别名的脚本时,源文件是正确答案。

    source yourscript.sh
    

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        您可以使用以下命令。

        shopt -s expand_aliases
        
        source ~/.bashrc
        
        eval $command
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-01-09
          • 1970-01-01
          • 1970-01-01
          • 2018-09-24
          • 1970-01-01
          • 1970-01-01
          • 2016-09-27
          相关资源
          最近更新 更多