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

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

У меня есть приложение, которое я могу запустить, находясь в расположении файла, как показано ниже:

-$ cd home/myApps/app
-$ ./run.sh

Я хочу вызвать run.sh из любого места в моем терминале, не указывая полный путь. Я попробовал использовать alais и добавить приведенный ниже код в файл bashrc.

alias mylovleyapp=/home/myApps/app/run.sh

проблема в том, что всякий раз, когда я хочу запустить приложение с помощью mylovleyapp, программа возвращает ошибку, потому что run.sh зависит от других файлов в папке myApps

Как мне этого добиться?

решение1

В Рим можно попасть разными путями.

Псевдоним

Если вы предпочитаете псевдоним, вы можете сделать следующее:

alias mylovleyapp='(cd home/myApps/app && ./run.sh)'

Скобки (...)заставляют две команды выполняться в подоболочке. Таким образом, ваш текущий каталог не изменится после завершения программы.

Скрипт-обертка в вашем PATH

Вместо этого вы можете создать скрипт-обертку и поместить его в папку, которая находится в вашем поиске PATH, например, ~/.local/binили ~/binесли вы единственный пользователь, которому нужен доступ, или /usr/local/binесли всем пользователям нужен доступ. Тогда все, что вам нужно сделать, это ввести имя скрипта, чтобы запустить программу.

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

#!/usr/bin/env bash
cd home/myApps/app
./run.sh

Сохраните этот скрипт, например, как ~/.local/bin/mylovleyapp. Сделайте скрипт исполняемым, чтобы его можно было запустить:

chmod +x ~/.local/bin/mylovleyapp

Если ~/.local/binне существовало, и вам пришлось его создать, то выйдите из системы и войдите снова, чтобы он был автоматически включен в ваш PATH. С этого момента, просто набрав mylovleyappв терминале, вы запустите свое приложение.

решение2

Поскольку автор не предоставил пример скрипта, я собираюсь сделать его. Он будет делать одну вещь. Запускаться lsв каталоге скрипта.

Да, я знаю, что можно обойтись и lsбез ./. Но в этом примере я делаю вид, что это необходимо, чтобы продемонстрировать скрипт, который использует текущий каталог скрипта.

#!/usr/bin/env bash
ls ./

Сохраните этот скрипт где-нибудь. Я сохраню его как /home/ubuntu/test/myscript. Сделайте его исполняемым с помощью chmod +x /home/ubuntu/test/myscript. Теперь cdперейдите в каталог, где находится скрипт (например, cd /home/ubuntu/test), и запустите скрипт с помощью ./myscript:

ubuntu@computer:~/test$ ./myscript
myscript someRandomFile

Пока все хорошо. Но теперь давайте запустим его из другого каталога. Для этого примера я собираюсь запустить его из корневого каталога ( /).

ubuntu@computer:~/test$ cd /
ubuntu@computer:/$ /home/ubuntu/test/myscript
bin  dev home lib   lib64  lost+found mnt proc run  snap sys usr
boot etc init lib32 libx32 media      opt root sbin srv  tmp var

Упс. Мы хотели, чтобы он печатал файлы в месте расположения скрипта, а не в месте расположения пользователя. Прежде чем мы найдем решение, подумайте опочемуон делает это на мгновение. Ответ прост. ./относительнопользователятекущий каталог, а не тот, где находится скрипт.

Чтобы получить каталог скрипта изнутри скрипта, мы рассмотримэтот вопрос Stack Overflow.

Суть проста: script_dir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"получим текущий каталог скрипта и сохраним его в переменной script_dir.

Давайте обновим скрипт соответствующим образом. Теперь наш скрипт такой:

#!/usr/bin/env bash
script_dir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
ls "$script_dir"

Давайте запустим его и посмотрим, работает ли он:

ubuntu@computer:/$ /home/ubuntu/test/myscript
myscript someRandomFile

Работает! Он печатает файлы в каталоге скрипта, даже если вы не находитесь в том же каталоге, что и скрипт. Мы закончили. Общая идея проста. В скрипте ./ссылается на каталог пользователя. "$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"ссылается на каталог, в котором находится скрипт. Обновите свой скрипт соответствующим образом, и он должен работать.

решение3

Вам нужно добавить путь к вашему приложению в переменную PATH. Чтобы сделать это временно, перейдите в каталог, где находится ваше приложение, а затем:

PATH=.:$PATH

Теперь вы можете вызывать свое приложение из любого места, не вводя его полный путь. Если вы закроете терминал, эта настройка будет потеряна.

Чтобы сделать его постоянным, вам нужно отредактировать файл .bashrc и добавить :/home/myApps/app в конец PATH. Сохраните новый файл .bashrc, а затем:

source .bashrc

решение4

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

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

Таким образом, ваше .bashrcдополнение должно выглядеть следующим образом:

alias mylovleyapp='cd /home/myApps/app; ./run.sh'

Это предполагает, что зависимые файлы находятся в /home/myApps/app... если нет, то вы можете изменить рабочий каталог на тот, в котором находятся зависимые файлы, а затем запустить приложение, используя абсолютный путь в качестве второго компонента.

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