我是 bash shell 脚本编程的新手,遇到过一个挑战。我知道我可以重新装弹。只需按以下步骤:
. .profile
但是我尝试在我正在编写的 bash 脚本中执行相同的操作,但是它不起作用。 有什么想法吗,还有什么我可以澄清的吗?
谢谢
Bash 脚本在单独的子 shell 中运行。为了使这个工作,您将需要来源这个其他脚本以及。
试试:
#!/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 "$@"
尝试重新加载当前 shell:
source ~/.profile
试试这个:
cd source .bash_profile
在尝试重新加载/source ~/. profile 文件时会出现两个问题。 [这里指的是 Ubuntu linux ——在某些情况下,命令的细节会有所不同]
广告1)
直接在终端中运行这个命令意味着不会创建子 shell:
source ~/.bash_profile
或者
. ~/.bash_profile
在这两种情况下,这将使用. profile 文件的内容更新环境。
Ad2)您可以通过调用
sh myscript.sh
. myscript.sh
在第一种情况下,这将创建一个子 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 } 我希望这能消除一些常见的误解 祝你好运!
为了使脚本中应用的更改对全局环境有效,必须使用该脚本运行
.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 }
我希望这能消除一些常见的误解 祝你好运!