Створення псевдоніма для скрипта 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.