alias mysql em .bashrc não funciona após login / reboot

2

Depois de executar apt-get update && apt-get upgrade , isso não funciona mais

Quando digito mysql na linha de comando, esse erro é retornado

-bash: mysql: command not found

Se eu rodar isso funciona até o próximo login

alias mysql=/opt/mysql/server-5.6/bin/mysql
echo "alias mysql=/opt/mysql/server-5.6/bin/mysql" >> /root/.bashrc

Estou fazendo o login via putty como root

/root/.bashrc

alias mysql=/opt/mysql/server-5.6/bin/mysql

/root/.profile

# ~/.profile: executed by Bourne-compatible login shells.

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

mesg n

/root/.bash_profile

#############################################################################

export PS1='\[3[01;31m\]\u\[3[01;33m\]@\[3[01;36m\]\h \[3[01;33m\]\w \[3[01;35m\]\$ \[3[00m\]'
umask 022

#############################################################################

eval "'dircolors'"

#############################################################################

alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'
alias ..='cd ..'
alias ...='cd ../..'
alias s='ssh -l root'

#############################################################################

export EDITOR="vim"

export HISTFILESIZE=99999999
export HISTSIZE=99999999
export HISTCONTROL="ignoreboth"

export LS_OPTIONS='--color=auto -h'

#############################################################################

Depois de adicionar o alias na linha de comando, você pode executar mysql , mas se você executar um script de shell, o script retornará o mesmo erro

restore.sh: 315: restore.sh: mysql: not found

atualizar

# echo $SHELL
/bin/bash
    
por clarkk 16.09.2014 / 16:21

2 respostas

2

Existem alguns problemas possíveis aqui.

  1. Você não está executando como root . O alias é definido no ~/.bashrc da raiz, portanto, se você estiver executando como outro usuário, ele não será encontrado. Se esse for o caso, adicione a linha alias ao usuário ~/.bashrc ou mude para a raiz.

  2. Você está executando como root, mas não está executando bash . Faça o login como root e verifique a saída de echo $SHELL . Se isso não for /bin/bash , use o comando chsh para defini-lo como bash.

  3. Você está executando como root , mas este é um shell de login (por exemplo, se você usou ssh para efetuar login). Se o ~/profile que você mostra não estiver em /root , o alias .bashrc não será carregado. As conchas de login ignoram .bashrc , e é por isso que você tem essas linhas em .profile .

    Se o .profile for da raiz, ele ainda poderá ser ignorado se existir /root/.bash_profile ou /root/bash_login .

UPDATE

Agora que você deu mais informações, posso dizer que o problema é, na verdade, 3. Então, você está se conectando com o ssh, o que significa que você está executando uma shell de login . Esses shells não lêem .bashrc , e é por isso que o .profile contém o pequeno loop que chama .bashrc explicitamente. No entanto, se ~/.bash_profile ou ~/.bash_login existir, ~/.profile será ignorado. Então, porque você também tem ~/.bash_profile , ~ / .profile is not read and since ~ / .bash_profile does not source ~ / .bashrc , your alias is not available. This is explained in man bash ':

When bash is invoked as an interactive login shell, or as a non-inter‐ active shell with the --login option, it first reads and executes com‐ mands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

Então, a solução mais simples seria mesclar os arquivos. Adicione as linhas de .profile a .bash_profile ou vice-versa . Se você optar por adicionar as linhas de ~/.bash_profile a ~ / .profile , make sure you delete ~ / .bash_profile 'após a mesclagem.

Seja qual for o motivo, o alias nunca estará disponível para seus scripts. Ao executar um script, o bash é chamado como um shell não interativo e não-login e os ~/.profile e .bashrc são ignorados. Além disso, os aliases não são disponibilizados para scripts, a menos que você ative a opção expand_aliases :

shopt -s expand_aliases

Portanto, para fazer um alias funcionar em seu script, você precisará i) ler manualmente o arquivo onde o alias está definido (porque ~/.bashrc não é lido por scripts) e ii) habilitar a opção expand_aliases .

Por exemplo:

#!/usr/bin/bash

## Make your aliases available to the script
shopt -s expand_aliases

## Read .bashrc
. ~/.bashrc

## Run your mysql command
mysql
    
por 16.09.2014 / 17:12
0

Você precisará adicionar o bin do mysql ao $ PATH do seu sistema. Você pode ver quais locais estão em sua variável $ PATH por tipo echo $PATH . Programas nesses locais podem ser lidos simplesmente digitando o nome deles.

Existe uma seção na documentação do mysql sobre a instalação do binário que endereça a adição do mysql à variável $ PATH do seu sistema. O texto relevante é:

**Update environment var /etc/profile    
    nano /etc/profile        
    export MYSQL_HOME=/opt/mysql/server-5.6        
    export PATH=$PATH:$MYSQL_HOME/bin        
    export MANPATH=$MANPATH:$MYSQL_HOME/man

Você pode ler mais aqui: link

    
por 16.09.2014 / 16:46

Tags