Запускать сценарий из любого места

У меня есть сценарий:

#!/bin/bash
echo "$(dirname $(readlink -e $1))/$(basename $1)"

, который находится здесь: /home/myuser/bin/abspath.sh , у которого есть разрешения на выполнение .

Если я запустил echo $ PATH , я получу следующее: / usr / local / bin: / bin: / usr / bin: / usr / local / sbin: / usr / sbin : / sbin: / home / myuser / bin

Я хочу иметь возможность из любого каталога вызвать abspath , и он вызовет мой сценарий. Я использую bash, что я делаю не так?

8
задан 24 May 2016 в 13:01
5 ответов

Вы хотите ввести abspath , но программа называется abspath.sh . Проблема не в том, находится ли он в PATH, а в том, что вы просто не используете его имя для его вызова.

У вас есть два варианта:

  1. Вместо этого введите abspath.sh .
  2. Переименуйте программу в abspath .
30
ответ дан 2 December 2019 в 22:40

Этот код достаточно мал, чтобы я мог закодировать его как функцию оболочки:

abspath() {
    echo "$(dirname "$(readlink -e "$1")")/$(basename "$1")" 
} 

И да, вам нужны все эти кавычки.

6
ответ дан 2 December 2019 в 22:40

задайте псевдоним, добавив свою команду в файл .bashrc.

alias abspath='sh /home/myuser/bin/abspath.sh'

И не забудьте указать источник файла.

4
ответ дан 2 December 2019 в 22:40

Я бы переименовал ваш сценарий bash в abspath , а затем переместил его в bin каталог. Вы не сможете позвонить по abspath откуда угодно, тогда

2
ответ дан 2 December 2019 в 22:40

Третий вариант - создать псевдоним abspath, указывающий на ваш сценарий abspath.sh.

0
ответ дан 2 December 2019 в 22:40

Теги

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