我是bash shell脚本的新手,遇到了挑战。我知道我可以通过以下方式重新加载我的“.profile”文件:
. .profile
但我正在尝试在我正在编写的bash脚本中执行相同的操作,但它无法正常工作。 有任何想法吗?我可以提供其他任何澄清的内容吗?
由于
答案 0 :(得分:166)
尝试重新加载当前的shell:
source ~/.profile
答案 1 :(得分:8)
试试这个:
cd
source .bash_profile
答案 2 :(得分:3)
bash脚本在单独的子shell中运行。为了完成这项工作,您还需要获取其他脚本。
答案 3 :(得分:2)
尝试重新加载/源〜/ .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 祝你好运!
答案 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 "$@"