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

我是bash shell脚本的新手,遇到了一个挑战。 我知道我可以重新加载我的“.profile”文件,只是做:

. .profile 

但我试图执行相同的一个bash脚本,我正在写,它只是不工作。 有任何想法吗? 还有什么我可以提供澄清?

谢谢

试试这个来重新加载你的当前shell:

 source ~/.profile 

尝试这个:

 cd source .bash_profile 

bash脚本在一个单独的子shell中运行。 为了使这个工作,你将需要来源另一个脚本。

尝试重新加载/ source〜/ .profile文件时出现了一些问题。 [这是指Ubuntu的Linux – 在某些情况下,命令的细节将有所不同]

  1. 你是直接在terminal或脚本中运行吗?
  2. 你如何在脚本中运行它?

广告。 1)

直接在terminal中运行意味着将不会创build子shell。 所以你可以使用两个命令:

 source ~/.bash_profile 

要么

 . ~/.bash_profile 

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

广告2)你可以通过调用来启动任何bash脚本

 sh myscript.sh 

要么

 . myscript.sh 

在第一种情况下,这将创build一个不会影响系统的环境variables的子shell,只有子shell进程才能看到它们。 在完成subshel​​l命令后,将不会应用任何导出等。 这是一个共同的错误,并导致许多开发者失去很多时间。

为了使脚本中应用的更改对全局环境有效,必须使用该脚本运行脚本

 .myscript.sh 

命令。

为了确保你的脚本不是在subshel​​中运行的,你可以使用这个函数。 (再例如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祝你好运!

尝试:

 #!/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 "$@"