Как мне создать постоянный псевдоним 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
,
Теперь вы можете проверить свой псевдоним.
Есть много способов создать псевдоним. Наиболее используемые способы:
Добавить псевдонимы прямо в вашем
~/.bashrc
файлНапример: добавить эти строки в
~/.bashrc
файлalias ll='ls -l' alias rm='rm -i'
В следующий раз (после того, как вы вышли из системы / вошли или сделали
. ~/.bashrc
) когда вы печатаетеrm
rm -i
Команда будет выполнена.Второй метод позволяет вам создать отдельный файл псевдонимов, поэтому вам не нужно помещать их в
.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"
После размещения псевдонимов в каждой строке вы должны перезагрузить или повторно войти в систему.