На этот вопрос уже есть ответ здесь:
Я новичок в 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
Что я могу сделать, чтобы иметь возможность запускать скрипт из любой директории?
Пожалуйста, дайте мне подробные инструкции по всем командам, которые нужно вводить и где их вводить.
Существуют вещи пары, которые необходимо иметь в виду:
bash
принимает файл сценария как аргумент, который является что bash trimmomatic
делает, однако bash trimmomatic
подразумевает что файл trimmomatic
должен быть в текущем рабочем каталоге, где Вы выполняете команду bash trimmomatic
. Параметры командной строки, которые являются файлами, если не указано с полным путем, должны быть в текущем рабочем каталоге.
Когда Вы выполняете любую невстроенную команду в оболочке, такой как 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
непосредственно.
Поместите сценарий в/usr/bin или в / мусорное ведро и дайте ему разрешение выполнения. При выполнении как это необходимо смочь выполнить сценарий отовсюду.