Чи можна визначити команду в bash?


25

Наприклад, чи можу я встановити:

gb = cd /media/Dan/evolution

... так що щоразу, коли я виконую gbв bash, я можу cdдо цього конкретного каталогу?

Я знайшов щось в Інтернеті: aliasкоманду. Але, здається, він не може виконати роботу вище.

Чи можна це зробити? Як?


10
alias gb='cd /media/Dan/evolution'
Нікакін

4
@Zen, прийміть відповідь, якщо вона вирішить проблему. Це жест сказати дякую користувачеві, який допоміг вам вирішити проблему :)
Рамеш

2
Примітка. Йдеться про bash: Linux - це ядро. Linux часто, неправильно, використовується для позначення всієї операційної системи. Це може призвести до плутанини. Наприклад, питання "чи можу я зробити таке і таке під Linux?", Якщо ви можете це зробити на якомусь комп’ютері, то так. Тому що ви могли реалізувати будь-яку операційну систему, яка вам подобається, використовуючи ядро ​​Linux. Тому нам потрібно знати, який ви використовуєте Ubuntu Gnu + Linux +, ймовірно, X11 (якщо на робочому столі, тобто не на сервері без дисплея).
ctrl-alt-delor

@richard Добре, хоча технічно це posixскарги, тож не просто bash.

1
@richard Дійсно, у цьому проблема. Це працює, оскільки люди не мають на увазі Android та подібні аромати, більш-менш. Я не кажу, що це добре, але це те, що воно є. Моє звернення було неявним, оскільки я коментував вашу операцію Linux. Я щойно давав зрозуміти, оскільки тема була заплутаною. (Я, можливо, неправильно зрозумів ваш останній коментар)
keyser

Відповіді:


50

просто введіть:

alias gb='cd /media/Dan/evolution'

Щоб зробити цей параметр постійним (щоб він вставлявся після перезавантаження або відкриття іншої консолі), додайте цей рядок у файл ~ / .bashrc (якщо ви використовуєте bash як оболонку за замовчуванням)


Щоб зробити це ще приємніше, ви можете створити виділений файл псевдоніму для своїх псевдонімів, скажімо, ~ / .bash_aliases, і зателефонувати до нього у файлі ~ / .bashrc таким чином: [-e ~ / .bash_aliases] &&. ~ / .bash_aliases Таким чином, ви не "забруднюєте" файл ~ / .bashrc файлом іншими матеріалами.
GeertVc

39

Альтернатива згладжуванню

gb() { cd /media/Dan/evolution; }

Це визначає функцію оболонки gb, яка не бере аргументів і виконує cd / media / Dan / evolution. Як і в інших пропозиціях, це можна додати до ~ / .bashrc


У випадку, коли команда alias демонструє визначений псевдонім, afaik, що визначає таку функцію, може призвести до "несподіваної поведінки". Я проголосую за вас заради повноти :)
vfbsilva

7
Не зовсім. Ви можете просто набрати: оголосити -f gb, щоб побачити, що він робить
Пол Калабро

11
Крім того, цей варіант є більш гнучким, оскільки дозволяє додавати власну логіку в визначення функції, щоб приймати аргументи і робити все необхідне. Псевдоніми дозволяють лише передавати аргументи і робити попередньо визначені дії .
Пол Калабро

5
@PaulCalabro Ще краще, він type gbбуде працювати, якщо це псевдонім або функція.
Sparhawk

POSIXLY: { echo 'true() { : ; }' >./script ; . ./script ; command -V true ; command -V /usr/bin/true ; }- true is a shell function\n/usr/bin/true is /usr/bin/true- \nсимволи були буквальними новими рядками у висновку.
mikeserv

11

Це можливо, і aliasце команда, яку ви шукаєте. Наприклад, alias ll="ls -l"в bash дозволять вводити llзамість ls -l. Зверніть увагу, що під час встановлення псевдоніма немає пробілів. man aliasможе бути корисним і.


-3

Крім того, можна написати програму C, яка викликає потрібну команду і зберегти її в / usr / bin.

#include <stdio.h>
#include <string.h>

int main () {
    char command[50]; //notice you can change this to fit your needs
    int return_val;

    strcpy( command, "echo \"cd /media/Dan/evolution\" | bash -i" );
    return_val = system(command); 

   //this is equivalent to entering the command in a new bash, 
   //which will return and exit

    return return_val;
}

Щоб скласти його, перейдіть до каталогу, в якому було збережено джерело (в bash), і виконайте (можливо, вам знадобиться sudo):

 gcc ./gb.c -o /usr/bin/gb

Після додаткових досліджень тут я зрозумів, що просто закинути вашу команду system()не вдасться для вбудованих команд. Ось чому вам потрібно створити екземпляр інтерактивного bash і повторити свої команди до нього. Це просто надмірно складно і, ймовірно, марно, якщо ви не хочете, скажімо, скоротити виклик до сценарію оболонки ( some_scriptзамість нього sh ~/radgeRayden/Scripts/some_script).

Посилання на функцію system ()


2
Ви насправді спробували це? Це не працює.
Денніс

1
З тієї ж причини, sh -c "cd /media/Dan/evolution"яка не працює. Підказка: передплата
Digital Trauma

5
cd/ неізольовані проблеми в стороні, яка перевага в загортанні команди оболонки в програму c, коли ви могли так само легко (або простіше) поставити цю команду в сценарій оболонки?
Цифрова травма

1
Не експерт у цьому, але чи не слід щось подібне (сподіваємось, щось корисніше) ставити в / usr / local / bin?
Джо

2
Навіть якщо ця СУМАЄ працювати, вона не повинна переходити в / usr / local / bin, як це характерно для одного користувача.
Йоган
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.