Створення псевдоніма для скрипта 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
ви пробували з псевдонімом меню = '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доступним у тому, $PATHщо може бути двійковим виконуваним файлом, виконавчим сценарієм або навіть символьним посиланням на іншу програму .. Якщо ви видалите запис, vimвін перестає бути доступним для користувачів.
roaima

@roaima Що я мав на увазі, що виклик vim дещо відрізняється від виклику спеціальної програми. Я бачу, до чого ти потрапляєш, і згоден
Натанаель Морган

У мене є сценарій, який називається, ifviщо живе в моєму $HOME/bin(що трапляється в моєму $PATH). Я просто використовую його точно так само, як і я можу запустити встановлений системою двійковий файл. Це насправді не має значення, що це спеціальна програма.
roaima

0

З псевдонімом є два питання

alias menu='./menuScript.sh'
  1. Він вимагає, щоб ви знаходились у певному каталозі, коли ви викликаєте псевдонім. Якщо ви знаходитесь в каталозі, де menuScript.shйого не існує, псевдонім не вдасться виконати.

    Було б краще, якщо ви вказали повний абсолютний шлях до menuScript.shсценарію, визначаючи псевдонім, наприклад

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

    або подібне.

  2. Як вже говорили інші, ще одна причина, по якій псевдонім може вийти з ладу, полягає в тому, що сценарій не виконується, або він має недійсний #!-line. Переконайтеся, що сценарій виконується за допомогою

    chmod +x menuScript.sh

    і що перший рядок у сценарії є

    #!/bin/bash

    або будь-який шлях до bash(або будь-якої оболонки, для якої написано сценарій) у вашій системі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.