Bash 将 Folder/Directory 添加到 linux 中的路径的脚本不起作用
Bash Script To Add A Folder/Directory to the path in linux not working
我创建了一个 bash 脚本来添加
/My_Scripts/Bash_Scripts
到 linux.
的默认路径
!/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
您的更改会影响当前 shell only.Put .bashrc 文件中的条目。它将影响所有 terminal.open .bashrc 文件并添加以下行和 运行 文件 -
vim ~/.bashrc
export PATH="$PATH:/home/username"
~/.bashrc
编辑父级 shell
script.sh
#!/bin/bash
export "PATH=$PATH:$HOME/My_Scripts/Bash_Scripts"
echo $PATH
$~路径=$(./script.sh)
$~ echo $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
首先 - 你应该使用 echo $PATH
。通过简单地键入 $PATH
你试图执行命令,因此 "No such file or directory error"
接下来 - /root/My_Scripts/Bash_Scripts
并没有真正添加到 PATH
。您看到的第一个输出是在脚本内部完成的,因此可以在那里看到更改。
原因是 PATH
只会在脚本 shell 的上下文中设置,作为 source add_path
执行它以保留变量的变化(但仅适用于当前 shell).
如果您希望变量在所有 shell 中保持不变 - 将其添加到 /.bashrc
(因为您是以根用户身份运行的)。
您正在启动一个新的 bash 进程并且 PATH
仅在新进程的上下文中被修改。当此进程退出时,在其环境中所做的更改不会传播到父进程。
相反,您可能希望在当前 bash 进程的上下文中修改 PATH
。如果你暂时想要这个,你可以 source
你的脚本。 source
将在当前 bash 进程的上下文中 运行。当心任何副作用 - 例如 cd
会更改目录,exit
会终止当前的 bash 进程。
如果您希望此更改永久用于所有未来的交互式会话,您可以修改 ~/.bashrc
。
此外,shebang 的语法是 #!/path/to/program
,您缺少一个 #
。
我创建了一个 bash 脚本来添加
/My_Scripts/Bash_Scripts
到 linux.
!/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
您的更改会影响当前 shell only.Put .bashrc 文件中的条目。它将影响所有 terminal.open .bashrc 文件并添加以下行和 运行 文件 -
vim ~/.bashrc
export PATH="$PATH:/home/username"
~/.bashrc
编辑父级 shell
script.sh
#!/bin/bash
export "PATH=$PATH:$HOME/My_Scripts/Bash_Scripts"
echo $PATH
$~路径=$(./script.sh)
$~ echo $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
首先 - 你应该使用 echo $PATH
。通过简单地键入 $PATH
你试图执行命令,因此 "No such file or directory error"
接下来 - /root/My_Scripts/Bash_Scripts
并没有真正添加到 PATH
。您看到的第一个输出是在脚本内部完成的,因此可以在那里看到更改。
原因是 PATH
只会在脚本 shell 的上下文中设置,作为 source add_path
执行它以保留变量的变化(但仅适用于当前 shell).
如果您希望变量在所有 shell 中保持不变 - 将其添加到 /.bashrc
(因为您是以根用户身份运行的)。
您正在启动一个新的 bash 进程并且 PATH
仅在新进程的上下文中被修改。当此进程退出时,在其环境中所做的更改不会传播到父进程。
相反,您可能希望在当前 bash 进程的上下文中修改 PATH
。如果你暂时想要这个,你可以 source
你的脚本。 source
将在当前 bash 进程的上下文中 运行。当心任何副作用 - 例如 cd
会更改目录,exit
会终止当前的 bash 进程。
如果您希望此更改永久用于所有未来的交互式会话,您可以修改 ~/.bashrc
。
此外,shebang 的语法是 #!/path/to/program
,您缺少一个 #
。