bash 脚本不创建别名也不更新 $PS1

bash 脚本不创建别名也不更新 $PS1

我想我会写一个bash脚本来设置我经常使用的别名,并更改命令promt。

下面是我的脚本。

#!/bin/bash
# Make useful aliases
alias c='clear'
alias p='pwd'
alias d='pwd'
alias l='ls -l'
alias clp='clear;pwd'
# Prompt
PS1='unix % '
# Echo to check if script runing
echo 'Hello world'

但是当我运行此脚本时(在授予其执行权限后),不会添加别名。提示也不会更新为 PS1 给定的值。尽管如此,它还是会回显Hello world,所以看起来脚本正在运行。

user $ ./myEnv.sh 
Hello world
user $ d
d: command not found
user $

错误在哪里?

答案1

脚本很容易在自己的环境中创建这些变量。然后,当退出时,该特定环境将被破坏,您将返回到父 shell 的环境,其中这些变量未按您想要的方式设置。

您应该像这样获取它,而不是执行它. myEnv.sh

答案2

该脚本将在其自己的实例中创建别名。该别名在另一个或父 bash 实例中不可用。此外,提示符仅在该特定 bash 实例中更改。

答案3

正如其他人所说,如果您希望别名和更改的环境变量等内容生效,则应该获取脚本。

然而,这样做的缺点是,虽然您可以在路径中执行脚本,但不能以这种方式获取脚本;这意味着每次您想要包含别名时,都必须指定完整路径。这可能有点烦人。

为了避免这种情况,您必须使用~/.bashrc.启动时,当交互运行时,bash shell 将获取该文件自动地,因此,如果您在该文件中定义别名,那么从那时起,它们将在所有(新启动的)shell 中可用。

如果您不希望别名总是可用,那么您可以创建一个功能在你的~/.bashrc

addaliases() {
    alias c='clear'
    alias p='pwd'
    # ... and so on
}

现在,下次启动 bash 时,您可以addaliases 从命令行运行,然后将添加别名。

如果您不使用 bash 但使用其他 shell,那么显然您不应该将其放在 中~/.bashrc,而是放在另一个文件中;哪一个完全取决于您所使用的具体外壳。

相关内容