我是bash shell脚本编程新手,遇到了挑战。我知道我可以只是在做我重装“的.profile”文件:在bash shell脚本(在unix中)重新加载.profile?
. .profile
,但我想在bash脚本我写,执行相同的,它只是不工作。 任何想法?还有什么我可以提供澄清?
谢谢
我是bash shell脚本编程新手,遇到了挑战。我知道我可以只是在做我重装“的.profile”文件:在bash shell脚本(在unix中)重新加载.profile?
. .profile
,但我想在bash脚本我写,执行相同的,它只是不工作。 任何想法?还有什么我可以提供澄清?
谢谢
试试这个重新加载当前的shell:
source ~/.profile
bash脚本运行在一个单独的子shell中。为了完成这项工作,您还需要获取其他脚本。
我不知道(对所有这些仍然是新的)你到底意味着什么由“源” - 另一个脚本。可以请扩展一点。我试过了: $。 〜/ .profile $。/etc/profile 没有成功。非常感谢。 – 2010-07-18 05:07:27
@amirrustan:你的脚本将需要从你的'.profile'文件中找到这样的内容:'。 $ HOME/.profile',你需要通过采购它来启动你的脚本。像''。/path/to/yourscript' – 2010-07-18 08:35:48
@amirrustam请阅读http://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-脚本/ 176788#176788 – lesmana 2010-08-23 03:44:20
尝试:
#!/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 [email protected]
echo my script continues here
' arg0 "[email protected]"
试试这个:
cd
source .bash_profile
试图重新加载/源当一对夫妇的问题出现时〜 /.profile文件。 [这是指Ubuntu Linux操作系统 - 在某些情况下,命令的细节会有所不同]
Ad。 1)
直接在终端中运行意味着将不会创建子shell。所以,你可以使用两个命令:
source ~/.bash_profile
或
. ~/.bash_profile
在这两种情况下,这将更新.profile文件的内容的环境。
广告2)您可以通过调用
sh myscript.sh
或
. myscript.sh
在第一种情况下,这将创建一个子shell,不会影响环境变量启动任何bash脚本你系统,它们将只对subhell进程可见。在完成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 祝你好运!
正如Ignacio指出的那样,您的脚本正在一个子shell中运行。子shell不能修改主外壳(子进程不能修改其父进程)。所以你需要通过使用“。”来“源”脚本。命令(也可以拼写为“源”)。所以如果你的脚本想修改环境变量,你需要做一些类似“source myscript”或“。myscript”的东西(它们都是同样的东西)。这会修改你的主shell的环境。 (我认为是你想要做的,让我知道如果这是错误的。) – bstpierre 2010-07-20 03:08:17
我从你的问题得到了我的答案:) – 2016-10-18 17:04:20