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