重新加载。在Bash shell脚本中的新闻(在UNIX中)?
-
17-09-2020 - |
题
我是新的bash shell脚本,并遇到挑战。我知道我可以通过执行命令重新加载“.profile”文件:
. .profile
.
但我在我编写的bash脚本中尝试在bash脚本上执行它,它只是不起作用。 有任何想法吗?其他任何我可以提供澄清?
感谢
解决方案
尝试此操作以重新加载您当前的shell:
source ~/.profile
. 其他提示
试试:
cd
source .bash_profile
.
在尝试重新加载/源〜/ .profile文件时出现了几个问题。
[这是指Ubuntu Linux - 在某些情况下,命令的细节将不同]
- 您是否直接在终端或脚本中运行这个?
- 如何在脚本中运行此脚本?
广告。 1)
直接在终端中运行意味着没有创建子屏幕。所以你可以使用两个命令:
source ~/.bash_profile
.
或
. ~/.bash_profile
.
在这两种情况下,这将使用.profile文件的内容更新环境。
ad 2)您可以通过调用
来启动任何bash脚本sh myscript.sh
.
或
. myscript.sh
.
在第一种情况下,这将创建一个子屏幕,不会影响系统的环境变量,并且它们将仅可见于子屏幕过程。完成子Shell命令后,不会应用任何导出等。 这是一个常见的错误,导致很多开发人员失去了很多时间。
为了让您的脚本中应用的更改为全局环境生成效果,脚本必须使用
运行.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. 祝你好运!
bash脚本在单独的子屏幕中运行。为了使这项工作进行这项工作,您也需要源此其他脚本。
尝试:
#!/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 "$@"
. 不隶属于 StackOverflow