Как запустить скрипт оболочки без использования команд "sh" или "bash"? - PullRequest
235 голосов
/ 08 января 2012

У меня есть сценарий оболочки, который я хочу запустить без использования команд "sh" или "bash". Например:

Вместо: sh script.sh

Я хочу использовать: script.sh

Как я могу это сделать?

P.S. (Я) Я не использую сценарий оболочки, и я пытался читать об псевдонимах, но я не понимал, как их использовать.

(ii) Я также читал о связывании скрипта с другим файлом в переменных PATH. Я использую свой университетский сервер, и у меня нет прав для создания файла в этих местах.

Ответы [ 10 ]

398 голосов
/ 08 января 2012

Добавьте "shebang" вверху вашего файла:

#!/bin/bash

И сделайте ваш файл исполняемым (chmod +x script.sh).

Наконец, измените ваш путь, чтобы добавить каталоггде находится ваш скрипт:

export PATH=$PATH:/appropriate/directory

(обычно вы хотите $HOME/bin для хранения ваших собственных скриптов)

63 голосов
/ 08 января 2012

Вот некоторые из предпосылок прямого использования имени скрипта:

  1. Добавьте строку she-bang (#!/bin/bash) в самом верху.
  2. Использование chmod u+x scriptname делает скрипт исполняемым. (где scriptname - имя вашего скрипта)
  3. Поместите скрипт в папку /usr/local/bin.
  4. Запустите скрипт, используя только имя скрипта.

Примечание: Причина, по которой я предложил поместить ее в папку /usr/local/bin, заключается в том, что, скорее всего, это будет путь, уже добавленный к вашему PATH variable.

Обновление:

Если у вас нет доступа к папке /usr/local/bin, выполните следующие действия:

  1. Создайте папку в вашем домашнем каталоге и назовем ее myscripts.
  2. Сделайте ls -lart в вашем домашнем каталоге, чтобы определить сценарий запуска, который использует ваша оболочка. Это должно быть .profile или .bashrc.
  3. Как только вы определили скрипт запуска, добавьте следующую строку в ваш скрипт: export set PATH=$PATH:~/myscript.
  4. После добавления введите исходный скрипт или выйдите из системы и снова войдите в систему.
  5. Выполните ваш скрипт, используя scriptname.
20 голосов
/ 08 января 2012

Просто убедитесь, что это исполняемый файл, используя chmod +x. По умолчанию текущий каталог отсутствует в вашей переменной PATH, поэтому вам нужно будет выполнить его как ./script.sh - или иным образом ссылаться на него по определенному пути. В качестве альтернативы, если вам действительно нужен script.sh, вам нужно добавить его в свой PATH. (Возможно, у вас нет доступа для изменения системного пути, но вы почти наверняка можете изменить PATH вашей текущей среды.) Это также предполагает, что ваш сценарий начинается с чего-то вроде #!/bin/sh.

Вы также можете использовать псевдоним, который на самом деле не связан со сценариями оболочки, а только с оболочкой и прост:

alias script.sh='sh script.sh'

Что позволит вам просто использовать script.sh (буквально - это не будет работать для любого другого файла *.sh) вместо sh script.sh.

14 голосов
/ 21 августа 2017

В этом примере файл будет называться myShell

Прежде всего нам нужно будет сделать этот файл, мы можем просто начать, набрав следующее:

sudo nano myShell

Уведомлениемы не ставили расширение .sh?Это потому, что когда мы запускаем его из терминала, нам нужно только набрать myShell, чтобы запустить нашу команду!

Теперь в nano верхняя строка ДОЛЖНА быть #!/bin/bash, тогда вы можете оставить новую строкупрежде чем продолжить.

Для демонстрации я добавлю базовый Hello World! ответ

Итак, я набираю следующее:

echo Hello World!

После этого мой пример должен выглядеть следующим образом:

#!/bin/bash
echo Hello World!

Теперь сохраните файл и затем выполните эту команду:

sudo chmod +x myShell

Теперь мы сделали исполняемый файл, и мы можем переместить его в /usr/bin/, используя следующую команду:

sudo cp myShell /usr/bin/

Чтобы убедиться, что машина может выполнить ее правильно, нам нужно перезагрузить машину

Я использовал sudo shutdown -r now

Поздравляю!Наша команда сейчас выполнена!В терминале мы можем набрать myShell и он должен сказать Hello World!

13 голосов
/ 08 января 2012

Вы должны включить исполняемый бит для программы.

chmod +x script.sh

Затем вы можете использовать ./script.sh

Вы можете добавить папку в PATH в вашем файле .bashrc(находится в вашем домашнем каталоге).Добавьте эту строку в конец файла:

export PATH=$PATH:/your/folder/here
6 голосов
/ 12 января 2016

Вы можете ввести sudo install (имя скрипта) / usr / local / bin / (то, что вы хотите набрать, чтобы выполнить указанный скрипт)

например: sudo install quickcommit.sh /usr/local/bin/quickcommit введите пароль

теперь может работать без .sh и в любом каталоге

3 голосов
/ 28 февраля 2014

доп. (текущий каталог) в вашей переменной PATH.
Вы можете сделать это, отредактировав свой файл .profile.
поместите следующую строку в ваш файл .profile
PATH=$PATH:.

Просто добавьте строку Shebang (#!/bin/bash) в начале вашего скрипта и сделайте скрипт исполняемым (используя chmod +x <File Name>).

0 голосов
/ 29 мая 2019

Просто:

/path/to/file/my_script.sh
0 голосов
/ 31 марта 2019

Введите "#!/bin/sh" перед сценарием. Затем сохраните его как script.sh, например. скопируйте его в $HOME/bin или $HOME/usr/bin
Каталог может отличаться на разных дистрибутивах Linux, но они заканчиваются 'bin' и находятся в домашнем каталоге cd $HOME/bin или $HOME/usr/bin
Тип chmod 700 script.sh
И вы можете запустить его, просто набрав run.sh на терминале. Если это не работает, попробуйте chmod +x run.sh вместо chmod 700 run.sh

0 голосов
/ 30 июля 2017

Вот мой скрипт резервного копирования, который даст вам идею и автоматизацию:

Сервер: Ubuntu 16.04 PHP: 7.0 Apache2, Mysql и т.д ...

# Make Shell Backup Script - Bash Backup Script
    nano /home/user/bash/backupscript.sh
        #!/bin/bash
        # Backup All Start
        mkdir /home/user/backup/$(date +"%Y-%m-%d")
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_rest.zip /etc -x "*apache2*" -x "*php*" -x "*mysql*"
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_apache2.zip /etc/apache2
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_php.zip /etc/php
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_mysql.zip /etc/mysql
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/var_www_rest.zip /var/www -x "*html*"
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/var_www_html.zip /var/www/html
        sudo zip -ry /home/user/backup/$(date +"%Y-%m-%d")/home_user.zip /home/user -x "*backup*"
        # Backup All End
        echo "Backup Completed Successfully!"
        echo "Location: /home/user/backup/$(date +"%Y-%m-%d")"

    chmod +x /home/user/bash/backupscript.sh
    sudo ln -s /home/user/bash/backupscript.sh /usr/bin/backupscript

измените / home / user на свой каталог пользователя и введите: backupscript в любом месте терминала, чтобы запустить скрипт! (при условии, что / usr / bin находится на вашем пути)

...