脚本中的路径与实际路径不同

脚本中的路径与实际路径不同

当我echo $PATH在终端窗口中时,它输出:

/home/charles/anaconda3/bin:
/home/charles/anaconda3/condabin:
/usr/local/sbin:/usr/local/bin:
/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
/usr/local/games:/snap/bin:/snap/bin:
/home/charles/.emacs.d/bin

但是当我运行脚本(不是以 root 身份)时:

#!/bin/sh
echo $PATH

它只输出根路径,而不输出我的主目录中的路径:

/usr/local/sbin:/usr/local/bin:
/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
/usr/local/games:/snap/bin:/snap/bin

我正在尝试从脚本启动spyder,该脚本来自:

$ which spyder
/home/charles/anaconda3/bin/spyder

有什么方法可以让脚本识别我的主目录中的路径部分吗?

解决了emacs:我将添加和的代码移至从到 的anaconda路径。~/.bashrc~/.profile

答案1

您的脚本在子 shell 中运行 - 这意味着它是由您的交互式/登录 shell 生成的。子 shell 是为了运行脚本/程序的明确目的而生成的 shell。子 shell 的规则之一是它可以访问由“父壳”, 但不是局部变量。

这表明/home/...变量是当地的变量,这意味着您将它们设置在某处/以某种方式 - 也许在~/.bashrc

解决方案是您必须在脚本中声明本地 PATH 变量。您可以按如下方式执行此操作:

export PATH="$PATH:/home/charles/anaconda3/bin:/home/charles/anaconda3/condabin:/home/charles/.emacs.d/bin"

这个路径现在是当地的到您的脚本/子 shell,并且不会作为全局变量传播。

相关内容