当我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,并且不会作为全局变量传播。