我是新的bash shell脚本,并遇到挑战。我知道我可以通过执行命令重新加载“.profile”文件:

. .profile
.

但我在我编写的bash脚本中尝试在bash脚本上执行它,它只是不起作用。 有任何想法吗?其他任何我可以提供澄清?

感谢

有帮助吗?

解决方案

尝试此操作以重新加载您当前的shell:

source ~/.profile
.

其他提示

试试:

cd 
source .bash_profile
.

在尝试重新加载/源〜/ .profile文件时出现了几个问题。 [这是指Ubuntu Linux - 在某些情况下,命令的细节将不同]

  1. 您是否直接在终端或脚本中运行这个?
  2. 如何在脚本中运行此脚本?
  3. 广告。 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 "$@"
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top