在bash shell脚本中重新加载.profile(在unix中)?

时间:2010-07-18 05:01:53

标签: bash shell unix .bash-profile

我是bash shell脚本的新手,遇到了挑战。我知道我可以通过以下方式重新加载我的“.profile”文件:

. .profile

但我正在尝试在我正在编写的bash脚本中执行相同的操作,但它无法正常工作。 有任何想法吗?我可以提供其他任何澄清的内容吗?

由于

5 个答案:

答案 0 :(得分:166)

尝试重新加载当前的shell:

source ~/.profile

答案 1 :(得分:8)

试试这个:

cd 
source .bash_profile

答案 2 :(得分:3)

bash脚本在单独的子shell中运行。为了完成这项工作,您还需要获取其他脚本。

答案 3 :(得分:2)

尝试重新加载/源〜/ .profile文件时会出现几个问题。 [这指的是Ubuntu linux - 在某些情况下命令的细节会有所不同]

  1. 您是直接在终端或脚本中运行吗?
  2. 如何在脚本中运行它?
  3. 广告。 1)

    直接在终端中运行它意味着不会创建子shell。所以你可以使用两个命令:

    source ~/.bash_profile
    

    . ~/.bash_profile
    

    在这两种情况下,这都将使用.profile文件的内容更新环境。

    广告2)您可以通过调用

    启动任何bash脚本
    sh myscript.sh 
    

    . myscript.sh
    

    在第一种情况下,这将创建一个不会影响系统环境变量的子shell,它们只对子shell进程可见。完成subshel​​l命令后,将不会应用任何导出等。 这是一个常见的错误,并导致很多开发人员失去很多时间。

    为了使您的脚本中应用的更改对全局环境生效,必须使用

    运行脚本
    .myscript.sh
    

    命令。

    为了确保您的脚本未在子文件中运行,您可以使用此功能。 (再次举例说明是Ubuntu shell)

    #/bin/bash
    
    preventSubshell(){
      if [[ $_ != $0 ]]
      then
        echo "Script is being sourced"
      else
        echo "Script is a subshell - please run the script by invoking . script.sh command";
        exit 1;
      fi
    }
    

    我希望这能解决一些常见的误解! :d 祝你好运!

答案 4 :(得分:0)

尝试:

#!/bin/bash
# .... some previous code ...
# help set exec | less
set -- 1 2 3 4 5  # fake command line arguments
exec bash --login -c '
echo $0
echo $@
echo my script continues here
' arg0 "$@"