Создание псевдонима для скрипта 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 и попытался подписаться на другие посты, но безрезультатно. У кого-нибудь еще есть предложения?


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в начале.

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


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

7

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

alias menu='./menuScript.sh'

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

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

alias menu='source ./menuScript.sh'

или

alias menu='. ./menuScript.sh'

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


6

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


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(или любой оболочке, для которой написан скрипт) в вашей системе.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.