Запуск скрипта из каждого каталога на ubuntu linux [дубликат]

На этот вопрос уже есть ответ здесь:

Я новичок в Linux. На своем рабочем столе я создал следующий скрипт под названием trimmomatic

#!/bin/bash
java -jar /home/aishah/software_library/Trimmomatic-0.36/trimmomatic-0.36.jar

Когда я открываю терминал и делаю

$ cd Desktop

а затем

$ bash trimmomatic

скрипт работает.

Однако сценарий не работает, если я запускаю его из каталогов, отличных от Desktop. Например, когда я открываю терминал и непосредственно выполняю

$ bash trimmomatic

он говорит

bash: trimmomatic: No such file or directory

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

Пожалуйста, дайте мне подробные инструкции по всем командам, которые нужно вводить и где их вводить.

0
задан 3 February 2019 в 19:47

2 ответа

Существуют вещи пары, которые необходимо иметь в виду:

  1. bash принимает файл сценария как аргумент, который является что bash trimmomatic делает, однако bash trimmomatic подразумевает что файл trimmomatic должен быть в текущем рабочем каталоге, где Вы выполняете команду bash trimmomatic. Параметры командной строки, которые являются файлами, если не указано с полным путем, должны быть в текущем рабочем каталоге.

  2. Когда Вы выполняете любую невстроенную команду в оболочке, такой как ls или df, оболочка проходит список каталогов в $PATH переменная. Если файл будет найден и будет исполняемым файлом в каком-либо из тех каталогов, то оболочка выполнит его. Конечно, ~/Desktop не находится в списке каталогов в $PATH, таким образом, Вы не можете назвать его непосредственно как trimmomatic

Теперь, у Вас есть однострочный сценарий. В сущности полный сценарий является ненужным в случае, если, где у Вас есть просто единственная команда там, если он не предназначается, чтобы быть совместно использованным с другими пользователями в системе. Намного более практический путь, должен был бы определить псевдоним или функцию в Вашем ~/.bashrc файл. Для функции можно сделать

trimmomatic(){
    java -jar /home/aishah/software_library/Trimmomatic-0.36/trimmomatic-0.36.jar
}

После добавления этого к ~/.bashrc, выполненный source ~/.bashrc команду и функцию можно назвать как

$ trimmomatic

Функции не зависят от $PATH, следовательно можно выполнить их где угодно. Если бы Вы действительно настаиваете на том, чтобы использовать сценарий, то я предложил бы поместить сценарий в ~/bin каталог или ~/.local/bin. На Ubuntu ~/bin добавляется к $PATH когда Вы регистрируетесь через ~/.profile файл конфигурации, однако ~/.local/bin не, таким образом, необходимо было бы добавить следующую строку к Вашему ~/.bashrc файл: PATH="$PATH:~/.local/bin. В обоих случаях не забудьте получать файл конфигурации для обновления текущей среды оболочки. После того как это сделано, оболочка начнет смотреть в любом из тех каталогов, и если Ваш сценарий будет расположен там, то это будет выполняться. Конечно, этот путь Вы не должны называть сценарий через bash trimmomatic, скорее можно звонить trimmomatic непосредственно.

3
ответ дан 26 October 2019 в 09:26

Поместите сценарий в/usr/bin или в / мусорное ведро и дайте ему разрешение выполнения. При выполнении как это необходимо смочь выполнить сценарий отовсюду.

0
ответ дан 26 October 2019 в 09:26

Другие вопросы по тегам:

Похожие вопросы: