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

8

У меня есть скрипт:

#!/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 <some_path_here>и вызывать мой скрипт. Я использую Bash, что я делаю не так?

гепард
источник

Ответы:

30

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

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

  1. Напечатайте abspath.shвместо этого.
  2. Переименуйте программу в abspath.
Майкл Хэмптон
источник
1
... Или создайте симлинк cd $HOME/bin ; ln -s abspath.sh abspath. Это позволит вам сохранить правильное расширение для скрипта и иметь инструмент, названный так, как вам нравится. (Вы могли бы в некотором будущем заменить свой сценарий оболочки на сценарий python, для примера ...)
Ф. Хаури
Или создайте псевдоним.
Дженни Д
6

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

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

И да, вы хотите все эти цитаты.

Гленн Джекман
источник
4

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

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

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

Баласехар Нелли
источник
1
Почему вы хотите sudo здесь?
CVn
1
Я бы отказался от голосования, если бы у меня было достаточно репутации, потому что использование sudo без необходимости просто неправильно. Кажется, что некоторые люди автоматически используют sudo для всего, вместо того, чтобы учиться, когда и зачем это нужно.
Скотт Северанс
Договорились с вами, ребята. И я знаю, когда использовать sudo. Я не видел все вопросы.
Баласехар Нелли
2

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

Харви
источник
0

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

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