Как создать постоянный псевдоним Bash?

Я хотел бы создать псевдоним для команды 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.

Что такое фактическая проблема и как я могу ее решить?

1
задан 13 April 2017 в 15:24

7 ответов

Существует много способов создания псевдонима. Наиболее часто используемые способы:

Добавить псевдонимы непосредственно в ваш файл ~/.bashrc Например: добавьте эту строку в файл ~/.bashrc
alias ll='ls -l'
alias rm='rm -i'
В следующий раз (после того, как вы вышли из системы / f6]), когда вы набираете rm, команда rm -i будет выполнена. Второй метод позволяет вам создать отдельный файл псевдонимов, поэтому вам не придется помещать их в .bashrc, а в файл по вашему выбору. Сначала отредактируйте файл ~/.bashrc и добавьте или раскомментируйте следующие строки, если он еще не
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Сохраните его и закройте файл. После этого все, что вам нужно сделать, это создать файл ~/.bash_aliases и добавить туда псевдонимы с тем же форматом, который указан в первом методе. Содержимое моего файла ~/.bash_aliases:
alias cs='cd;ls'
192
ответ дан 25 May 2018 в 23:57
  • 1
    +1 для использования ~/.bash_aliases. – ændrük 10 June 2011 в 10:48
  • 2
    Да, использование другого файла для псевдонимов намного чище, также переносится между дистрибутивами. Я использую этот файл, потому что некоторых псевдонимов недостаточно и нужна функция. Таким образом, это намного более чисто, если вместо этого вы используете файл для этой задачи. У меня есть другой псевдоним - & gt; alias aliases="xdg-open ~/.bash_aliases && source ~/.bash_aliases", поэтому псевдоним стал полезным при сохранении, и если вы сделаете какую-то ошибку, он сообщит вам об этом. – erm3nda 27 April 2017 в 15:08
  • 3
    так как после добавления псевдонима, такого как alias ls='ls -althr', некоторые из указанных флагов не вступили в силу, в этом случае флаг -t не вступил в силу. ты знаешь почему? – Sajuuk 22 March 2018 в 12:43
  • 4
    По умолчанию ~/.bashrc содержит включение для ~/.bash_aliases, нет необходимости редактировать его. – Jaakko 14 May 2018 в 12:49

Проблема заключается в том, что вы пытаетесь выполнить неисполняемый файл: вы можете проверить это с помощью:

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

Обратите внимание, что в первом столбце нет буквы «x - executable» (разрешения файлов ).

Файлы профилей не являются исполняемыми файлами, вместо их выполнения вы загружаете их:

source /home/bakhtiyor/.bashrc

или

. /home/bakhtiyor/.bashrc
17
ответ дан 25 May 2018 в 23:57

Мне кажется, что ваша единственная проблема - просто пытаться выполнить .bashrc, когда он не является исполняемым. Но это не правильный способ сделать это; всякий раз, когда вы вносите изменения в этот файл, вы должны «выполнить» его командой:

source ~/.bashrc

В противном случае он просто создаст новую оболочку, запустит файл в среде новой оболочки, а затем отбросит эта среда, когда она выходит, тем самым теряя ваши изменения. Пользуясь сценарием, он выполняется в текущей оболочке, поэтому он останется в силе.

Я предполагаю, что вторая ошибка была связана с тем, что bash_aliases не существует. Это не требуется, просто рекомендуется сохранить ваши изменения отдельно и организовано. Он используется только в том случае, если он существует, и вы можете проверить его в .bashrc:

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

Это говорит о том, что если файл ~ / .bash_aliases существует, запустите его.

14
ответ дан 25 May 2018 в 23:57
  • 1
    ~/.bash_aliases лучше. askubuntu.com/questions/194111/&hellip – tomByrer 8 July 2014 в 07:39
  • 2
    использование команды source заставило мои псевдонимы работать. +1 – dspacejs 2 December 2015 в 14:00
  • 3
    Только для полноты: начальная точка на линии . ~/.bash_aliases имеет то же значение, что и встроенная команда shell source. Я считаю, что это правильный ответ, объясняя, что происходит. – Melebius 9 February 2017 в 11:46
echo "alias vps='ssh -X user@example.com'" >> ~/.bashrc

Это пример, который я искал, способ набрать несколько букв на терминале («vps»), чтобы удаленно войти на сервер и включить пересылку X11, чтобы я мог запускать GUI-приложения, такие как «gedit» «по сети.

Независимо от команды command / aliased, этот способ с помощью оператора echo, кавычек и символа для добавления вывода команды в файл (>>) работает для меня. Просто замените мою команду на команду alias, которая вам нужна, и введите ее в ваш терминал.

7
ответ дан 25 May 2018 в 23:57
  • 1
    Цитата здесь немного сложная. В этом примере использование двойных кавычек является непроблематичным, но если текст в кавычках содержит знаки доллара, обратные косые черты и т. Д., Вам нужно будет понять, как оболочка обрабатывает их внутри двойных кавычек. Вы можете переключиться на одиночные кавычки снаружи и двойные кавычки внутри, но вам все равно нужно понять, как Bash обрабатывает двойные кавычки в определении псевдонима. – tripleee 30 November 2015 в 10:04

Я сделал эту небольшую функцию для быстрого написания нового псевдонима для .bashrc

##------------------------------------ ##
 #           -- new-alias --           #
 # creates new alias & writes to file  #
 #          $1 = alias new             #
 #          $2 = alias definition      #
##------------------------------------ ##
new-alias () { 
  if [ -z "$1" ]; then
    echo "alias name:"
    read NAME
  else
    NAME=$1
  fi

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

  echo "alias $NAME='$DEFINTION'" >> ~/.bashrc
  . ~/.bashrc
}
5
ответ дан 25 May 2018 в 23:57
  • 1
    Хорошая идея, но неосторожное использование этой функции может привести к обрыву .bashrc с несколькими экземплярами команды alias. Ваша функция, безусловно, должна выполнить некоторые проверки, чтобы избежать такого захламления. – Troublemaker-DV 31 March 2016 в 04:04

, если вы используете ruby, вы можете установить aka с помощью rubygem.

gem install aka2

use

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
ответ дан 25 May 2018 в 23:57

Я бы предложил использовать /etc/bash.bashrc

Вы можете добавить строку в конце этого файла.

alias ok="ping google.com"

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

0
ответ дан 25 May 2018 в 23:57
  • 1
    «Я бы предложил ..». и почему ты предлагаешь это? – muru 9 August 2015 в 07:17
  • 2
    Вам не следует возиться с системным файлом, если вы специально не хотите устанавливать общесистемные настройки для всех пользователей. В личной системе разница является незначительной, но тогда возиться с системными файлами сложнее в будущем, поэтому вы, вероятно, должны предпочесть свои личные файлы точек для личных предпочтений (и это упрощает копирование настроек в другом месте в будущее тоже). – tripleee 30 November 2015 в 10:06
  • 3
    Перезагружать? Это действительно ужасный совет, НЕ делайте этого, особенно когда source /etc/bash.bashrc делает все, что вам нужно в этом примере. Но вместо этого следует использовать ~/.bashrc или ~/.bash_aliases – Xen2050 18 January 2018 в 16:50
  • 4
    @ Xen2050, я предложил перезагрузить, чтобы показать, что он работает после перезагрузки / переустановки. Кстати, даже другое чистое окно терминала также будет работать. – Fahad Ahammed 19 January 2018 в 19:52
  • 5
    Вы можете перейти на новое ядро ​​без перезагрузки, это не старые окна ;-) – Xen2050 19 January 2018 в 19:54

Другие вопросы по тегам:

Похожие вопросы: