Bash Script для добавления папки / каталога к пути в Linux не работает

Я создал 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

3 ответа

Решение

Первое - вы должны использовать echo $PATH, Просто набрав $PATH вы пытаетесь выполнить команду, следовательно, "Нет такого файла или ошибка каталога"

Далее - /root/My_Scripts/Bash_Scripts не был действительно добавлен к PATH, Первый вывод, который вы видите внутри, сделан внутри скрипта, так что изменения можно увидеть там.

Причина в том, что PATH будет установлен только в контексте оболочки скрипта, выполнить его как source add_path сохранить изменения в переменных (но только для текущей оболочки).

Если вы хотите, чтобы переменная была постоянной во всех оболочках - добавьте ее в /.bashrc (так как вы работаете как root).

Вы запускаете новый процесс bash и PATH изменяется только в контексте нового процесса. Когда этот процесс завершается, изменения, сделанные в его среде, не распространяются на родительский процесс.

Вместо этого вы хотели бы изменить PATH в контексте текущего процесса Bash. Если вы хотите это временно, вы можете source твой сценарий source будет работать в контексте текущего процесса bash. Остерегайтесь любых побочных эффектов - как cd изменит каталог, exit завершит текущий процесс bash.

Если вы хотите, чтобы это изменение было постоянным для всех будущих интерактивных сессий, вы можете изменить ~/.bashrc,

Кроме того, синтаксис Шебанга #!/path/to/program вам не хватает #,

На ваши изменения влияет только текущая оболочка. Поместите запись в файл.bashrc. Это повлияет на все файлы терминала. Откройте файл.bashrc, добавьте строку ниже и запустите файл:

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

Редактировать родительскую оболочку

script.sh

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

$ ~ 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
Другие вопросы по тегам