
Я написал простой скрипт с расширением .sh
в моем домашнем каталоге, который я могу запустить прямо в нем, но я хочу запускать скрипт из каждого каталога, в котором я нахожусь. Что мне делать?
решение1
В интерактивном режиме вы всегда можете запускать свои скрипты, вводя текст ~/yourscript.sh
в командной строке, но это очень ограничивает возможности, особенно если вы хотите написать больше скриптов, вызывающих уже написанные вами скрипты.
Более интегрированный и гибкий подход предполагает размещение всех ваших скриптов в одном каталоге и добавление этого каталога в PATH
переменную среды.
После этого вы сможете ввести yourscript.sh
, и независимо от того, в каком каталоге вы находитесь, оболочка найдет ваш скрипт и выполнит его.
Вот как это обычно делается:
- Создайте
bin
каталог в своем домашнем каталоге и поместитеmv
туда свои скрипты. - Измените все скрипты на исполняемые (
chmod +x
). - Убедитесь, что
PATH
переменная окружения содержит ваш$HOME/bin
каталог. В некоторых системах по умолчанию~/.profile
ваш каталог будет добавлен$HOME/bin
вPATH
автоматически, поэтому проверьте его~/.profile
перед изменением.
Позвольте мне проиллюстрировать это с помощью сценария:
mkdir ~/bin
mv ~/*.sh ~/bin
chmod +x ~/bin/*
if ! grep 'PATH=.*HOME/bin' ~/.profile
then
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.profile
fi
. ~/.profile
echo "$PATH" # you should see your bin directory
cd /tmp # change to another random directory
type myscript.sh # see if the shell finds your scripts
Если вы видите свой bin
каталог в PATH
, то будет хорошей идеей выйти из системы и снова войти в нее, перейти в другой каталог и выполнить команду type yourscript.sh
еще раз, чтобы убедиться, что все настроено правильно.