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

Какова актуальная проблема и как я могу ее решить?

12 ответов

Решение

Чтобы создать псевдоним, добавьте псевдоним в .bashrc файл

gedit ~/.bashrc

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

альтернативный текст

Теперь выполните . ~/.bashrc в вашем терминале (между . а также ~/.bashrc,

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

альтернативный текст

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

  1. Добавить псевдонимы прямо в вашем ~/.bashrc файл

    Например: добавить эти строки в ~/.bashrc файл

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

    В следующий раз (после того, как вы вышли из системы / вошли или сделали . ~/.bashrc) когда вы печатаете rm rm -i Команда будет выполнена.

  2. Второй метод позволяет вам создать отдельный файл псевдонимов, поэтому вам не нужно помещать их в .bashrc, но в файл по вашему выбору. Сначала отредактируйте свой ~/.bashrc файл и добавьте следующие строки, если они еще не существуют, или раскомментируйте их, если они есть:

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

    Сохраните его и закройте файл. После этого все, что вам нужно сделать, это создать ~/.bash_aliases файл и добавьте туда свои псевдонимы в том же формате, который указан в первом методе.

    Содержание моего ~/.bash_aliases файл:

    alias cs='cd;ls'
    

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

source ~/.bashrc

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

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

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

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

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

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

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

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

source /home/bakhtiyor/.bashrc

или же

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

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

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

Я написал эту полезную функцию, чтобы быстро создать новый псевдоним, а затем записать определение псевдонима в ~/.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"
}

Если вы используете ruby, вы можете установить aka, используя 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 автоматически установит ваш точечный файл, так что вам это не нужно. Проверьте это.

Я хотел бы расширить эту идею!

Вы хотите alias команду в соответствии с вашим вопросом:

echo "alias wolfr='cd /home/wolf'">>./~bashrc

Теперь вы можете ввести wolfr чтобы перейти в домашний каталог волка.

Это очень похожая и очень классная export команда:

echo "export ngse=/etc/nginx/sites-enabled"./~bashrc

Теперь вы можете ввести cp $ngse/my_file /destination_directory/destination_filename для копирования файла из каталога с поддержкой сайтов в место назначения.

Ничего из этого не сработает, пока вы не сделаете что-то вроде этого:

exec bash

Кроме того, вы можете повторно войти в систему или перезагрузиться.

Насколько я помню, bashrc имеет или имел строку, предлагающую не использовать его для псевдонимов напрямую. Решением является использование внешнего файла (ов). foo а также bar псевдонимы были добавлены, но чтобы добавить baz 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 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 псевдоним работает. Я только сейчас понял, что в предыдущем ответе упоминалась эта техника, но они похоронили Леду.

Если у вас уже определены псевдонимы, вы можете экспортировать их с помощью этой относительно простой команды:

      alias > ~/.bash_aliases

В данном случае мои псевдонимы:

      alias ..='cd ..'
alias dir='ls -Farhl --color=never --author '
alias home='cd ~'
alias l='ls -lr'
alias ls='ls --color=auto'

Это скопирует существующие псевдонимы в.bash_aliases. Чтобы проверить это, запустите, например:

      $ exec bash
$ dir
#total 28K
#-rw------- 1 [John Doe] [John Doe] [John Doe]  118 Jul 18 14:37 .Xauthority
#-rw-r--r-- 1 [John Doe] [John Doe] [John Doe]  807 Jul  7 23:38 .profile
#drwx------ 1 [John Doe] [John Doe] [John Doe]   20 Jul 18 14:43 .local/
#drwxr-xr-x 1 [John Doe] [John Doe] [John Doe]   64 Jul 18 14:46 .config/
#-rw-r--r-- 1 [John Doe] [John Doe] [John Doe] 3.5K Jul 18 14:50 .bashrc
#-rw-r--r-- 1 [John Doe] [John Doe] [John Doe]  220 Jul  7 23:38 .bash_logout
#-rw------- 1 [John Doe] [John Doe] [John Doe] 1.1K Jul 18 14:48 .bash_history
#-rw-r--r-- 1 [John Doe] [John Doe] [John Doe]  125 Jul 18 14:50 .bash_aliases
#drwxr-xr-x 1 root       root       root        34 Jul  7 23:38 ../
#drwxr-xr-x 1 [John Doe] [John Doe] [John Doe]  178 Jul 18 14:53 ./

Я создал собственный инструмент командной строки для того же самого с помощью python. Посмотрите код здесь

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

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

alias ok="ping google.com"

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

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