繁体   English   中英

在bash shell脚本中重新加载.profile(在unix中)?

[英]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. 您是直接在终端或脚本中运行吗?
  2. 你如何在脚本中运行它?

广告。 1)

直接在终端中运行它意味着不会创建子shell。 所以你可以使用两个命令:

source ~/.bash_profile

要么

. ~/.bash_profile

在这两种情况下,这都将使用.profile文件的内容更新环境。

广告2)您可以通过调用启动任何bash脚本

sh myscript.sh 

要么

. myscript.sh

在第一种情况下,这将创建一个不会影响系统环境变量的子shell,它们只对子shell进程可见。 完成subshel​​l命令后,将不会应用任何导出等。 这是一个常见的错误,导致很多开发人员失去了很多时间。

为了使脚本中应用的更改对全局环境有效,必须运行脚本

.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM