как выполнить скрипт оболочки из любого каталога

как выполнить скрипт оболочки из любого каталога

Я написал простой скрипт с расширением .shв моем домашнем каталоге, который я могу запустить прямо в нем, но я хочу запускать скрипт из каждого каталога, в котором я нахожусь. Что мне делать?

решение1

В интерактивном режиме вы всегда можете запускать свои скрипты, вводя текст ~/yourscript.shв командной строке, но это очень ограничивает возможности, особенно если вы хотите написать больше скриптов, вызывающих уже написанные вами скрипты.

Более интегрированный и гибкий подход предполагает размещение всех ваших скриптов в одном каталоге и добавление этого каталога в PATHпеременную среды.

После этого вы сможете ввести yourscript.sh, и независимо от того, в каком каталоге вы находитесь, оболочка найдет ваш скрипт и выполнит его.

Вот как это обычно делается:

  1. Создайте binкаталог в своем домашнем каталоге и поместите mvтуда свои скрипты.
  2. Измените все скрипты на исполняемые ( chmod +x).
  3. Убедитесь, что 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еще раз, чтобы убедиться, что все настроено правильно.

Связанный контент