Создание псевдонима для скрипта bash

10

Поэтому я попытался экспериментировать и создал aliasв .bashrc. Однако, когда я проверяю команду, я получаю:

[rkahil@netmon3 ~]$ menu
-bash: menu: command not found

Вот что у меня в .bashrcфайле:

# Source global definitions

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
alias menu='./menuScript.sh'
alias vi='vim'

Самое смешное, что когда я создал псевдоним vi, это сработало. Но меню нет. Я просмотрел предыдущие посты на UnixStackExchange и попытался подписаться на другие посты, но безрезультатно. У кого-нибудь еще есть предложения?

ryekayo
источник
1
вы пробовали с псевдонимом menu = 'bash ./menuScript.sh'? (Я не на машине с Linux, не могу ее протестировать)
Con7e
Откуда вы запускаете «меню»? Если это не тот же каталог, что и «menuScript.sh», он будет жаловаться на «команда не найдена». Может быть, вы должны использовать абсолютный путь?
garethTheRed
1
@garethTheRed Было бы сказать./menuScript.sh: command not found
Майкл Мрозек
@MichaelMrozek - честный. Я только что проверил и сказал No such file or directory, что это не то же самое, что ошибка ОП. Тем не менее, точка остается неизменной - было бы лучше использовать абсолютный путь, если псевдоним всегда будет использоваться только из каталога, в котором он menuScript.shнаходится.
garethTheRed
1
@ryekayo готово :)
Con7e

Ответы:

9

Вы должны попробовать с alias menu='bash ./menuScript.sh'. В настоящее время я не работаю на машине с Linux, поэтому не могу проверить ее сам, но она должна работать. Когда вы называете псевдоним, он не знает, что делать с путем, поэтому вы должны включить bashв начале.

И сброс терминала помогает после внесения изменений.

Con7e
источник
Я не понимаю, насколько важен первый абзац - если только menuScript.shон не был переведен chmodв исполняемый файл, в этом случае сообщение об ошибке было бы «Отказано в доступе». Я подозреваю, что принудительное перечитывание .bashrcфайла является ответом. ... ... ... ... ... ... PS Оболочка знает, что делать с путем так же, как если пользователь вводит ./menuScript.sh- пытаясь выполнить файл.
Скотт
7

Когда вы делаете

alias menu='./menuScript.sh'

вы создаете псевдоним, который говорит «тот файл», но не говорит, что на самом деле делать с ним.

Тем не менее, если вы делаете

alias menu='source ./menuScript.sh'

или

alias menu='. ./menuScript.sh'

Вы говорите, запустите этот файл.

Майкл Даррант
источник
6

Помните ли вы исходный файл ~ / .bashrc после внесения изменений? Потому что изменения вступают в силу в вашем файле .bashrc после перезагрузки компьютера или просто поиска файла.

cbora
источник
2
Этот тип сообщения выглядит так, как будто он больше подходит для комментариев.
HalosGhost
2
@HalosGhost Как вы думаете? Это первое, о чём я бы тоже подумал, это вызвало бы именно это
Майкл Мрозек
@MichaelMrozek, я предлагаю это только потому, что мне кажется, что ответные сообщения должны предлагать окончательное решение, например, «Вы забыли найти свой источник .bashrc, сделайте следующее…». С другой стороны, уточняющие вопросы (например, «Вы забыли…?») Кажутся более подходящими для комментариев. Не нужно много перефразировать, чтобы этот пост казался более подходящим для ответа.
HalosGhost
Хотя перезагрузка компьютера может помочь, вам нужно только выйти из tty или сеанса (если вы используете менеджер входа в систему). Если вы вошли в графическую среду и не хотите source ~/.bashrcили . ~/.bashrc, то вы можете просто открыть еще одну оболочку. Это так просто. Перезагрузка не требуется.
Дилан
0

Причина, по которой он работал, vimзаключается в том, что эта программа уже может вызываться без прямого пути. Вам не нужно явно говорить «Я хочу, чтобы это выполнялось как программа», потому что это vimуже одно. Он жестко запрограммирован в ОС, что, когда он получает команду vim, идет и исполняет файл /usr/bin/viили там, где находится настоящая программа.

Натанаэль Морган
источник
Нет, это не жестко запрограммировано в ОС. В файле vimимеется файл с именем available, $PATHкоторый может быть двоичным исполняемым файлом, исполняемым скриптом или даже символической ссылкой на другую программу. Если вы удаляете запись, vimона перестает быть доступной для пользователей.
Ройма
@roaima Я имел в виду, что вызов vim немного отличается от вызова пользовательской программы. Я понимаю, к чему вы
Натанаэль Морган,
У меня есть сценарий под названием, ifviкоторый живет в моем $HOME/bin(который, случается, в моем $PATH). Я просто использую его точно так же, как я могу запустить установленный системой двоичный файл. Это действительно не имеет значения, что это пользовательская программа.
роайма
0

Есть две проблемы с псевдонимом

alias menu='./menuScript.sh'
  1. Это требует, чтобы вы находились в определенном каталоге, когда вы вызываете псевдоним. Если вы находитесь в каталоге, где menuScript.shего нет, псевдоним не будет выполнен.

    Было бы лучше, если бы вы указали полный абсолютный путь к menuScript.shскрипту при определении псевдонима, например

    alias menu="$HOME/local/bin/menuScript.sh"

    или похожие.

  2. Как уже говорили другие, еще одна причина, по которой псевдоним может потерпеть неудачу, заключается в том, что скрипт не является исполняемым или имеет недопустимую #!строку. Убедитесь, что скрипт выполняется с

    chmod +x menuScript.sh

    и что первая строка в скрипте

    #!/bin/bash

    или каков путь к bash(или любой оболочке, для которой написан скрипт) в вашей системе.

Кусалананда
источник