代码之家  ›  专栏  ›  技术社区  ›  Amir Rustamzadeh

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

  •  104
  • Amir Rustamzadeh  · 技术社区  · 16 年前

    我是bashshell脚本的新手,遇到了一个挑战。我知道只要执行以下操作就可以重新加载“.profile”文件:

    . .profile
    

    但是我正在写一个bash脚本来执行同样的操作,但是它不起作用。 有什么想法吗?还有什么我可以澄清的吗?

    谢谢

    5 回复  |  直到 12 年前
        1
  •  209
  •   bluish dmajkic    14 年前

    尝试以下操作以重新加载当前shell:

    source ~/.profile
    
        2
  •  9
  •   girardengo zeppaman    12 年前

    试试这个:

    cd 
    source .bash_profile
    
        3
  •  5
  •   twboc    8 年前

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

    1. 如何在脚本中运行它?

    广告1)

    在终端中直接运行这个命令意味着不会创建子shell。因此,您可以使用两个命令之一:

    source ~/.bash_profile
    

    . ~/.bash_profile
    

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

    ad2)您可以通过调用

    sh myscript.sh 
    

    或

    . myscript.sh
    

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

    .myscript.sh
    

    命令。

    为了确保脚本没有在subshel中运行,可以使用此函数(同样的例子是ubuntushell)

    #/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
    }
    

    祝你好运!

        4
  •  4
  •   Ignacio Vazquez-Abrams    16 年前

    bash脚本在单独的子shell中运行。为了使这项工作,你将需要源代码这个其他脚本以及。

        5
  •  1
  •   tilo    16 年前

    尝试:

    #!/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 "$@"
    
    推荐文章