Як створити постійний псевдонім Bash?


381

Я хотів би створити псевдонім для rmкоманди, щоб після виконання цієї команди було повідомлення про підтвердження. Тож я створюю такий псевдонім alias rm='rm -i'. Але наскільки я знаю, це тимчасовий псевдонім, і він живе, поки ви не закриєте термінал.

Як пояснено тут, щоб назавжди зберегти псевдонім, мені потрібно виконати ~/.bash_aliasesабо ~/.bashrcкоманди в терміналі та додати туди свій псевдонім. Але коли я виконую, ~/.bashrcя отримую таке повідомлення про помилку:

bash: /home/bakhtiyor/.bashrc: Permission denied

Під час запуску ~/.bash_aliasesя отримую ще одне повідомлення про помилку:

bash: /home/bakhtiyor/.bash_aliases: File or directory doesn't exist.

Що таке актуальна проблема та як її вирішити?



alias rm='rm -i'не вирішує проблему використання rm випадково
qwr

Відповіді:


428

Щоб створити псевдонім назавжди, додайте псевдонім у .bashrcфайл

gedit ~/.bashrc

А потім додайте псевдонім внизу.

alt текст

Тепер виконуйте . ~/.bashrcу своєму терміналі (між і .та має бути пробіл ~/.bashrc.

Тепер ви можете перевірити свій псевдонім.

alt текст


5
. @ Karthick87 ви написали «.. Тепер виконайте ~ / .bashrc в вашому терміналі (повинно бути зазор між і ~ / .bashrc» Чому цей крок потрібен?
Geek

5
що робить перший "." робити в. ~ / .bashrc?
Дзен

22
@Geek @Zen "Виконати" не був правильним терміном. Крапка рівнозначна source. З . ~/.bashrc, ви джерело вашого баш. Виконання файлу запустить дочірній процес, виконує команди в цьому процесі, а потім повернеться. Все, що робиться в дочірньому процесі, не впливає на батьківський процес (баш, з якого ви виконали). Натомість джерело (з крапкою) діє точно так, як якщо б ви написали вміст файлу в термінал. Це те, що ти хочеш. .bashrcотримується щоразу, коли ви починаєте баш. Якщо ви внесете зміни, вони не застосовуватимуться, поки ви не запустите новий bash або джерело вручну.
Готьє

@ButtleButkus - можливо, потрібно змінити лише налаштування одного користувача, а не всю систему. В Ubuntu загальносистемний файл .bashrc є /etc/bash.bashrc
WillC

1
@ShubhamA. дивіться це питання щодо поведінки OSX
jandersen

253

Існує маса способів створення псевдоніма. Найбільш використовувані способи:

  1. Додайте псевдоніми безпосередньо у свій ~/.bashrcфайл

    Наприклад: додайте цей рядок до ~/.bashrcфайлу

    alias ll='ls -l'
    alias rm='rm -i'

    У наступний раз (після того, як ви вийшли з / в або зроблені . ~/.bashrc) при введенні команда буде виконана.rmrm -i

  2. Другий метод дозволяє створити окремий файл псевдонімів, тому вам не доведеться вводити їх .bashrc, а до обраного вами файлу. Спочатку відредагуйте ~/.bashrcфайл та додайте наступні рядки, якщо вони ще не існують, або коментуйте їх, якщо вони є:

    if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
    fi

    Збережіть його та закрийте файл. Після цього все, що вам потрібно зробити, - це створити ~/.bash_aliasesфайл і додати туди свої псевдоніми з тим самим форматом, що вказаний у першому методі.

    Зміст мого ~/.bash_aliasesфайлу:

    alias cs='cd;ls'

71
+1 для використання ~/.bash_aliases.
ændrük

Так, використання іншого файлу для псевдонімів є набагато більш чистим, також портативним між дистрибутивами. Я використовую цей файл, тому що деякі псевдоніми недостатньо і функція потрібна. Тож набагато чистіше, якщо ви замість цього використовуєте файл для цього завдання. У мене є інший псевдонім -> alias aliases="xdg-open ~/.bash_aliases && source ~/.bash_aliases", тому псевдонім став корисним для економії, і якщо ви зробите якусь помилку, він буде рекламувати вас.
erm3nda

якось після того, як я додав псевдонім, наприклад alias ls='ls -althr', деякі задані прапори не набули чинності, в цьому випадку прапор -t не набрав чинності. ти знаєш чому?
Саджук

3
За замовчуванням ~/.bashrcмістить включення для ~/.bash_aliases, редагувати його не потрібно.
Яакко

1
Не завжди ~ / .bashrc містить включення для ~ / .bash_aliases, як це було у моєму випадку з терміналом Ubuntu Windows 10, це рішення було дуже зручним.
Хосе

19

Мені це здається, що ваша єдина проблема - це просто намагатися виконати .bashrc, коли він не виконується. Але це не правильний спосіб зробити це; щоразу, коли ви вносите зміни в цей файл, вам слід "виконати" його командою:

source ~/.bashrc

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

Я припускаю, що друга помилка була через те, що bash_aliases не існує. Це не потрібно, просто рекомендується тримати свої зміни окремими та організованими. Він використовується лише в тому випадку, якщо він існує, і ви можете побачити тест для нього в .bashrc:

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

Це говорить про те, що якщо файл ~ / .bash_aliases існує, запустіть його.


~/.bash_aliasesкраще. askubuntu.com/questions/194111/…
tomByrer

1
за допомогою sourceкоманди змусив мої псевдоніми працювати. +1
dspacejs

4
Тільки для повноти: Початкова точка на лінії . ~/.bash_aliasesмає те саме значення, що і вбудована команда оболонки source. Я вважаю це правильною відповіддю, пояснюючи, що відбувається.
Мелебій

17

Проблема полягає в тому, що ви намагаєтеся виконати невиконаний файл. Ви можете перевірити це за допомогою:

ls -la ~/.bashrc
-rw-r--r-- 1 username username 3596 2010-08-05 17:17 /home/pt001424/.bashrc

Зауважте, що на першому стовпці (x-файли) не існує букви "x - виконуваний".

Файли профілю не є виконуваними файлами, замість їх виконання ви завантажуєте їх:

source /home/bakhtiyor/.bashrc

або

. /home/bakhtiyor/.bashrc

7
echo "alias vps='ssh -X user@example.com'" >> ~/.bashrc

Це приклад, який я шукав, спосіб ввести кілька літер в термінал ("vps"), щоб віддалено увійти на сервер і включити перенаправлення X11, щоб я міг запускати додатки gui типу "gedit" по мережі.

Яка б команда / псевдонім команда, цей спосіб із заявою echo, лапками та символом для додавання виводу команди до файлу (>>) працює для мене. Просто замініть мою команду на потрібну вам команду псевдонім і введіть її у свій термінал.


Цитування тут трохи складне. У цьому прикладі використання подвійних лапок є непроблемним, але якщо текст у лапках містить знаки долара, зворотні риски тощо, вам потрібно буде зрозуміти, як оболонка обробляє їх всередині подвійних лапок. Ви можете перейти до одинарних лапок зовні і подвійних лапок зсередини, але тоді вам все одно потрібно зрозуміти, як Bash обробляє подвійні лапки у визначенні псевдоніму.
трійка

5

якщо ви використовуєте ruby, ви можете встановити ака за допомогою rubygem.

gem install aka2

використання

aka generate hello="echo helloworld" #add an alias
aka g hello="echo helloworld"  #add alias for lazy people

aka destroy hello #remove alias
aka d hello #remove alias for lazy people

rubygem автоматично створить ваш точковий файл, так що вам не потрібно. Перевір.


4

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

ПОРАДА : Переконайтесь, що ~/.bash_aliasesіснує та виконується в ~/.bashrc.

# -----------------------------------
#  Create a new permanent bash alias
#
#  @param $1 - name
#  @param $2 - definition
# -----------------------------------
new-alias () { 
  if [ -z "$1" ]; then
    echo "alias name:" && read NAME
  else
    NAME=$1
  fi

  if alias $NAME 2 > /dev/null > /dev/null; then
    echo "alias $NAME already exists - continue [y/n]?" && read YN
    case $YN in
      [Yy]* ) echo "okay, let's proceed.";;
      [Nn]* ) return;;
      * ) echo "invalid response." && return;;
    esac
  fi

  if [ -z "$2" ]; then
    echo "alias definition:" && read DEFINTION
  else
    DEFINTION="$2"
  fi

  if [ -f ~/.bash_aliases ]; then
    echo "alias $NAME=\"$DEFINTION\"" >> ~/.bash_aliases
  else
    echo "alias $NAME=\"$DEFINTION\"" >> ~/.bashrc
  fi

  alias $NAME="$DEFINTION"
}

1
Гарна ідея, але недбале використання цієї функції може призвести до виходу з ладу .bashrcдекількох примірників aliasкоманд. Ваша функція, безумовно, повинна здійснити деякі перевірки, щоб уникнути таких захаращень.
Troublemaker-DV

Це дійсний пункт. Чи є у вас запропонований спосіб вирішення, яким ви готові поділитися @ Troublemaker-DV?
blizzrdof77

Переконайтесь, що це все-таки є дійсним 2 1 / 2yo пізніше, але ... На 1-й я б привітав RC, щоб команди псевдонімів перевірили, чи цей псевдонім вже введений туди, щоб уникнути дублікатів. Ваша перевірка на наявність псевдоніму недостатня, оскільки РК може бути "забруднений" кількома однойменними псевдонімами.
Troublemaker-DV

0

Я б запропонував використовувати /etc/bash.bashrc

Ви можете додати рядок в кінці цього файлу.

alias ok="ping google.com"

Після введення псевдонімів у рядок вам доведеться перезавантажити або переробити.


7
"Я б запропонував .." і чому б ви запропонували це?
муру

2
Ви не повинні возитися із системним файлом, якщо ви спеціально не хочете встановити загальносистемну установку для всіх користувачів. У персональній системі різниця є незначною, але тоді пограбування із системними файлами складніше в дорозі, тому вам, мабуть, слід все-таки віддати перевагу власним файлам точок для особистих уподобань (і це полегшує копіювання налаштувань деінде в майбутнє теж).
трійка

1
Перезавантажити? Це дійсно жахлива порада, НЕ робіть цього, особливо коли source /etc/bash.bashrcвсе, що вам потрібно в цьому прикладі. Але слід використовувати ~/.bashrcабо ~/.bash_aliasesзамість цього
Xen2050

@ Xen2050, я запропонував перезавантажити, щоб показати, що він працює після перезавантаження / перегляду. До речі, навіть інше чисте вікно терміналу також запрацює.
Фахад Ахаммед

1
Ви можете оновити до нового ядра без перезавантаження, це не старі вікна ;-)
Xen2050

0

Як я пам’ятаю, bashrcє або мала рядок, який пропонує не використовувати її для псевдонімів безпосередньо. Рішення полягає в використанні зовнішнього файлу (ів). fooІ barпсевдоніми , які були додані, але додати файл повинен бути «отримано» (або просто відкрити новий термінал). Приклад як:bazbashrc

thufir@dur:~$ 
thufir@dur:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias bar='echo foo'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias foo='echo foo'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
thufir@dur:~$ 
thufir@dur:~$ cat .bash_aliases 
alias foo='echo foo'
alias bar='echo foo'
alias baz='echo baz'

thufir@dur:~$ 
thufir@dur:~$ source .bashrc 
thufir@dur:~$ 
thufir@dur:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias bar='echo foo'
alias baz='echo baz'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias foo='echo foo'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
thufir@dur:~$ 
thufir@dur:~$ baz
baz
thufir@dur:~$ 

тепер bazпсевдонім працює. Я тільки що зрозумів, що попередня відповідь згадувала цю техніку, але вони поховали леду.

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