2

После запуска apt-get update && apt-get upgrade это больше не работает

Когда я mysql в командной строке, эта ошибка возвращается

-bash: mysql: command not found

Если я запускаю это, это работает до следующего входа

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

Я вхожу через putty как 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='\[\033[01;31m\]\u\[\033[01;33m\]@\[\033[01;36m\]\h \[\033[01;33m\]\w \[\033[01;35m\]\$ \[\033[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'

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

После добавления псевдонима в командной строке вы можете запустить mysql но если вы запустите скрипт оболочки, скрипт выдаст ту же ошибку

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

Обновить

# echo $SHELL
/bin/bash

2 ответа2

2

Здесь есть несколько возможных проблем.

  1. Вы не работаете от имени root . Псевдоним определен в корневом ~/.bashrc поэтому, если вы работаете от имени другого пользователя, он не будет найден. Если это так, добавьте строку alias в ~/.bashrc вашего пользователя или переключитесь на root.

  2. Вы работаете от имени пользователя root, но не используете bash . Войдите в систему как root и проверьте вывод echo $SHELL . Если это не /bin/bash , используйте команду chsh чтобы установить для bash.

  3. Вы работаете от имени пользователя root но это оболочка для входа (например, если вы использовали ssh для входа в систему). Если отображаемый ~/profile не находится в /root , псевдоним .bashrc загружаться не будет. Оболочки входа в систему игнорируют .bashrc поэтому у вас есть эти строки в вашем .profile .

    Если .profile - это root, его все равно можно игнорировать, если существует /root/.bash_profile или /root/bash_login .


ОБНОВИТЬ

Теперь, когда вы дали больше информации, я могу сказать, что проблема на самом деле 3. Итак, вы подключаетесь через ssh, что означает, что вы используете оболочку входа в систему. Эти оболочки не читают .bashrc поэтому ваш .profile содержит небольшой цикл, который явно вызывает .bashrc . Однако, если существует ~/.bash_profile или ~/.bash_login , ~/.profile игнорируется. Таким образом, поскольку у вас также есть ~/.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`:

Когда bash вызывается как интерактивная оболочка входа в систему или как неинтерактивная оболочка с параметром --login, она сначала читает и выполняет команды из файла /etc /profile, если этот файл существует. После прочтения этого файла он ищет ~ /.bash_profile, ~ /.bash_login и ~ /.profile в указанном порядке, а также читает и выполняет команды из первой, которая существует и доступна для чтения. Опция --noprofile может использоваться, когда оболочка запущена, чтобы запретить это поведение.

Итак, самое простое решение - объединить файлы. Либо добавьте строки из .profile в .bash_profile либо наоборот. Если вы решили добавить строки из ~/.bash_profile в ~/.profile , make sure you delete ~/.bash_profile` после слияния.


Вне зависимости от причины, псевдоним никогда не будет доступен для ваших сценариев. При запуске сценария bash вызывается как неинтерактивная оболочка, не входящая в систему, и ~/.profile и .bashrc игнорируются. Кроме того, псевдонимы не становятся доступными для сценариев, если вы не активируете опцию expand_aliases :

shopt -s expand_aliases

Таким образом, чтобы псевдоним работал в вашем скрипте, вам нужно: i) вручную прочитать файл, в котором этот псевдоним определен (потому что ~/.bashrc не читается скриптами), и ii) включить параметр expand_aliases .

Например:

#!/usr/bin/bash

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

## Read .bashrc
. ~/.bashrc

## Run your mysql command
mysql
0

Вам нужно будет добавить корзину mysql в $ PATH вашей системы. Вы можете увидеть, какие местоположения есть в вашей переменной $ PATH, набрав echo $PATH . Программы в этих местах можно запустить, просто набрав их имя.

В документации по mysql есть раздел об установке из двоичного файла, в котором рассматривается добавление mysql в переменную $ PATH вашей системы. Соответствующий текст:

**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

Вы можете прочитать больше здесь: http://dev.mysql.com/doc/refman/5.1/en/binary-installation.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .