1

我创建了一个 bash 脚本来添加 /My_Scripts/Bash_Scripts 到 linux 的默认 PATH 中。

!/bin/bash
#This Script is used to add a folder/diectory to the PATH..


echo -e "\e[92m\e[1mCREATING PATH...........\n\n"
cd
mkdir My_Scripts
cd My_Scripts
mkdir Bash_Scripts
cd

export PATH=$PATH:$HOME/My_Scripts/Bash_Scripts
echo -e "\e[92m\e[1mPATH CREATON SUCCESSFUL\n \e[39m"
echo $PATH

脚本的输出是

root@kali:~/Desktop# bash add_path
CREATING PATH...........


PATH CREATON SUCCESSFUL

`/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/My_Scripts/Bash_Scripts'

但是如果我echo $PATH在外面的终端中输入,则不会添加路径

root@kali:~/Desktop# $PATH
bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin: No such file or directory
4

3 回答 3

1

您的更改仅在当前 shell 中受到影响。将条目放入 .bashrc 文件中。它将影响所有终端。打开 .bashrc 文件并添加以下行并运行文件 -

 vim ~/.bashrc
 export PATH="$PATH:/home/username"
 ~/.bashrc 

编辑父外壳

脚本.sh

#!/bin/bash 
export "PATH=$PATH:$HOME/My_Scripts/Bash_Scripts"
echo $PATH

$~ PATH=$(./script.sh)

$~ 回声 $PATH

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/loganaayahee/My_Scripts/Bash_Scripts
于 2015-10-31T09:53:17.893 回答
1

您正在启动一个新的 bash 进程,并且PATH仅在新进程的上下文中进行修改。当此进程退出时,在其环境中所做的更改不会传播到父进程。

相反,您可能希望PATH在当前 bash 进程的上下文中进行修改。如果你暂时想要这个,你可以使用source你的脚本。source将在当前 bash 进程的上下文中运行。当心任何副作用——比如cd会改变目录,exit会终止当前的 bash 进程。

如果您希望此更改永久用于所有未来的交互式会话,您可以修改~/.bashrc.

此外,shebang的语法是#!/path/to/program,你缺少一个#.

于 2015-10-31T10:15:29.543 回答
0

第一件事 - 你应该使用echo $PATH. 通过简单地键入$PATH您正在尝试执行命令,因此“没有这样的文件或目录错误”

接下来 -/root/My_Scripts/Bash_Scripts并没有真正添加到PATH. 您在脚本中看到的第一个输出完成,因此可以在那里看到更改。

原因是PATH只会在脚本 shell 的上下文中设置,执行它source add_path以保留变量中的更改(但仅适用于当前 shell)。

如果您希望变量在所有 shell 中保持不变 - 将其添加到/.bashrc(因为您以 root 身份运行)。

于 2015-10-31T09:58:48.067 回答