[英]Reload .profile in bash shell script (in unix)?
我是bash shell脚本的新手,遇到了挑战。 我知道我可以通过以下方式重新加载我的“.profile”文件:
. .profile
但我正在尝试在我正在编写的bash脚本中执行相同的操作,但它只是无法正常工作。 有任何想法吗? 还有什么我可以澄清的吗?
谢谢
试试这个来重装你当前的shell:
source ~/.profile
试试这个:
cd
source .bash_profile
bash脚本在单独的子shell中运行。 为了完成这项工作,您还需要获取此其他脚本。
尝试重新加载/ source~ / .profile文件时会出现几个问题。 [这指的是Ubuntu linux - 在某些情况下命令的细节会有所不同]
广告。 1)
直接在终端中运行它意味着不会创建子shell。 所以你可以使用两个命令:
source ~/.bash_profile
要么
. ~/.bash_profile
在这两种情况下,这都将使用.profile文件的内容更新环境。
广告2)您可以通过调用启动任何bash脚本
sh myscript.sh
要么
. myscript.sh
在第一种情况下,这将创建一个不会影响系统环境变量的子shell,它们只对子shell进程可见。 完成subshell命令后,将不会应用任何导出等。 这是一个常见的错误,导致很多开发人员失去了很多时间。
为了使脚本中应用的更改对全局环境有效,必须运行脚本
.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祝你好运!
尝试:
#!/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 "$@"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.