在bash shell脚本(在Unix中)重新加载.profile?
我是bash shell脚本的新手,遇到了一个挑战。 我知道我可以重新加载我的“.profile”文件,只是做:
. .profile
但我试图执行相同的一个bash脚本,我正在写,它只是不工作。 有任何想法吗? 还有什么我可以提供澄清?
谢谢
试试这个来重新加载你的当前shell:
source ~/.profile
尝试这个:
cd source .bash_profile
bash脚本在一个单独的子shell中运行。 为了使这个工作,你将需要来源另一个脚本。
尝试重新加载/ source〜/ .profile文件时出现了一些问题。 [这是指Ubuntu的Linux – 在某些情况下,命令的细节将有所不同]
- 你是直接在terminal或脚本中运行吗?
- 你如何在脚本中运行它?
广告。 1)
直接在terminal中运行意味着将不会创build子shell。 所以你可以使用两个命令:
source ~/.bash_profile
要么
. ~/.bash_profile
在这两种情况下,这将使用.profile文件的内容更新环境。
广告2)你可以通过调用来启动任何bash脚本
sh myscript.sh
要么
. myscript.sh
在第一种情况下,这将创build一个不会影响系统的环境variables的子shell,只有子shell进程才能看到它们。 在完成subshell命令后,将不会应用任何导出等。 这是一个共同的错误,并导致许多开发者失去很多时间。
为了使脚本中应用的更改对全局环境有效,必须使用该脚本运行脚本
.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 "$@"