Questão Como faço para criar um alias permanente de Bash?


Eu gostaria de criar um alias para rm comando para ter uma mensagem de confirmação depois de executar este comando. Então estou criando um alias como este alias rm='rm -i'. Mas, tanto quanto eu sei, isso é um alias temporário e vive até você fechar o terminal.

Como é explicado Aqui para salvar alias permanentemente eu preciso executar ~/.bash_aliases ou ~/.bashrc comandos no terminal e adicione meu alias lá. Mas quando eu executo ~/.bashrc Eu recebo a seguinte mensagem de erro:

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

Quando eu corro ~/.bash_aliases Eu recebo outra mensagem de erro como esta:

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

Qual é o problema real e como posso resolvê-lo?


308
2017-12-15 07:54


origem


Como você criou um apelido? - karthick87
@ karthick87. Eu atualizei minha pergunta. - Bakhtiyor
RESPONDA - stackoverflow.com/a/2622711/1487102 - neaumusic


Respostas:


Para criar um alias, adicione permanentemente o alias ao seu .bashrc Arquivo

gedit ~/.bashrc

Em seguida, adicione seu alias na parte inferior.

alt text

Agora execute . ~/.bashrc no seu terminal (deve haver um espaço entre o . e ~/.bashrc.

Agora você pode verificar seu alias.

alt text


342
2017-12-15 08:24



@ karthick87 você escreveu "Agora execute. ~ / .bashrc em seu terminal (deve haver uma lacuna entre o. e ~ / .bashrc.". Por que este passo é necessário? - Geek
o que o primeiro '. fazer em. ~ / .bashrc? - Zen
@Geek @Zen "Execute" não era o termo correto. O ponto é equivalente a source. Com . ~/.bashrc, você fonte seu bash. Executar o arquivo iniciaria um processo filho, executaria os comandos nesse processo e retornaria. Tudo o que é feito no processo filho não tem efeito no processo pai (o bash a partir do qual você executou). Em vez disso, o sourcing (com o ponto) age exatamente como se você tivesse escrito o conteúdo do arquivo no terminal. Isso é o que você quer. .bashrc é originado toda vez que você inicia uma festa. Se você fizer alterações, elas não serão aplicadas até que você inicie um novo bash ou fonte manualmente. - Gauthier
@ButtleButkus - pode querer alterar apenas as preferências de um usuário em vez de todo o sistema. No Ubuntu, o arquivo .bashrc de todo o sistema é /etc/bash.bashrc - WillC
Isso só funciona parcialmente. Preciso executar . ~/.bashrc toda vez que eu abro o terminal. Usando o OS X EI Captian (v10.11.6). - Shubham A.


Existem muitas maneiras de criar um alias. As formas mais utilizadas são:

  1. Adicione aliases diretamente no seu ~/.bashrc Arquivo

    Por exemplo: anexe estas linhas a ~/.bashrc Arquivo

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

    Da próxima vez (depois de ter efetuado logout / in ou feito . ~/.bashrc) quando você digita rm a rm -i comando será executado.

  2. O segundo método permite criar um arquivo de aliases separado, para que você não precise colocá-los em .bashrc, mas para um arquivo de sua escolha. Primeiro, edite seu ~/.bashrc arquivo e adicionar ou descomentar as seguintes linhas, se já não estiver

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

    Salve e feche o arquivo. Depois disso, tudo que você precisa fazer é criar um ~/.bash_aliases arquivo e adicionar seus aliases lá, com o mesmo formato especificado no primeiro método.

    Conteúdo do meu ~/.bash_aliases Arquivo:

    alias cs='cd;ls'
    

205
2017-12-15 08:21



+1 para usar ~/.bash_aliases. - ændrük
Sim, usar outro arquivo para aliases é muito mais limpo, também portátil entre distros. Eu uso esse arquivo porque algum alias não é suficiente e uma função é necessária. Portanto, é muito mais limpo se você usar um arquivo para essa tarefa. Eu tenho outro alias -> alias aliases="xdg-open ~/.bash_aliases && source ~/.bash_aliases", então o pseudônimo tornou-se disponível para salvar, e se você cometer algum erro, ele irá avisá-lo. - erm3nda
de alguma forma, depois que eu adicionei o alias como alias ls='ls -althr', algumas das bandeiras dadas não entrariam em vigor, neste caso, o sinalizador -t não entrou em vigor. Você sabe por quê? - Sajuuk
Por padrão ~/.bashrc contém inclusão para ~/.bash_aliases, não há necessidade de editá-lo. - Jaakko
Nem sempre ~ / .bashrc contém inclusão para ~ / .bash_aliases como no meu caso com o terminal do Ubuntu Windows 10, esta solução foi muito útil. - Jose


O problema é que você está tentando executar um arquivo não executável: Você pode verificar isso com:

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

Note que não existe uma letra "x - executável" na primeira coluna (permissões de arquivo).

Os arquivos de perfil não são arquivos executáveis, em vez de executá-los você os carrega com:

source /home/bakhtiyor/.bashrc

ou

. /home/bakhtiyor/.bashrc

17
2017-12-15 10:24





Parece-me que o seu único problema é simplesmente tentar executar o .bashrc quando não é executável. Mas esta não é a maneira correta de fazer isso; sempre que você fizer uma alteração neste arquivo, você deve "executá-lo" pelo comando:

source ~/.bashrc

Caso contrário, ele simplesmente criará um novo shell, executará o arquivo no ambiente do novo shell e, em seguida, descartará esse ambiente quando sair, perdendo assim sua alteração. Ao fazer o sourcing do script, ele é executado dentro do shell atual, portanto, ele permanecerá em vigor.

Estou assumindo que o segundo erro foi porque bash_aliases não existe. Não é necessário, apenas recomendado para manter suas alterações separadas e organizadas. Só é usado se existir, e você pode ver o teste em .bashrc:

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

Isto diz que se o arquivo ~ / .bash_aliases existir, então execute-o.


15
2018-01-16 20:29



~/.bash_aliases é melhor. askubuntu.com/questions/194111/… - tomByrer
usando o source comando fez meus aliases funcionarem. +1 - dspacejs
Apenas por completude: o ponto inicial na linha . ~/.bash_aliases tem o mesmo significado que o comando interno do shell source. Acho que esta é a resposta correta, explicando o que está acontecendo. - Melebius


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

Este é um exemplo que eu estava procurando, uma maneira de digitar algumas letras no terminal ("vps") para fazer login remotamente em um servidor e habilitar o encaminhamento do X11 para que eu possa executar aplicativos gui como "gedit" na rede.

Seja qual for o comando / comando com alias, desta forma com a instrução echo, aspas e o símbolo para anexar a saída de um comando a um arquivo (>>) funciona para mim. Apenas substitua meu comando pelo comando alias que você precisa e insira-o em seu terminal.


8
2018-06-15 11:39



A citação aqui é um pouco complicada. Neste exemplo, usar aspas duplas não é problemático, mas se o texto entre aspas contiver cifrões, barras invertidas, etc, você precisará entender como o shell as processa entre aspas duplas. Você pode alternar entre aspas simples no exterior e aspas duplas no interior, mas você ainda precisa entender como o Bash processa as aspas duplas na definição do alias. - tripleee


Eu fiz essa pequena função para escrever rapidamente um novo alias para .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
2017-12-17 20:37



Boa ideia, mas descuidada usando esta função pode levar a trashing .bashrc com várias instâncias de alias comando. Sua função definitivamente precisa implementar alguns exames para evitar essa confusão. - Troublemaker-DV


Se você estiver usando ruby, você pode instalar o aka usando rubygem.

gem install aka2

uso

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

O rubygem irá auto-source seu arquivo de ponto para que você não precisa. Confira.


4
2018-01-21 14:14





Eu sugeriria usar /etc/bash.bashrc

Você pode adicionar linha no final desse arquivo.

alias ok="ping google.com"

Depois de colocar os aliases por linha, você precisa reiniciar ou relogar.


0
2017-08-09 03:36



"Eu sugeriria ..." e por que você sugere isso? - muru
Você não deve estar mexendo com o arquivo de sistema, a menos que queira especificamente instalar uma configuração de todo o sistema para todos os usuários. Em um sistema pessoal, a diferença é marginal, mas brincar com os arquivos do sistema é mais complicado, então provavelmente você ainda deve preferir seus próprios arquivos dot para preferências pessoais (e isso facilita copiar as configurações em algum outro lugar). o futuro também). - tripleee
Reboot? Isso é realmente um conselho terrível, não faça isso, especialmente quando source /etc/bash.bashrc faz tudo o que você quer neste exemplo. Mas deveria usar ~/.bashrc ou ~/.bash_aliases em vez de - Xen2050
@ Xen2050, eu sugeri reiniciar para mostrar que funciona após a reinicialização / relogin. A propósito, até mesmo outra janela de terminal limpa também funcionará. - Fahad Ahammed
Você pode atualizar para um novo kernel sem reiniciar, isso não é o windows antigo ;-) - Xen2050