/根/.bashrc

/根/.bashrc

运行后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

/根/.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,但如果您运行 shell 脚本,该脚本将返回相同的错误

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

更新

# echo $SHELL
/bin/bash

答案1

这里可能存在一些问题。

  1. 您没有以 的身份运行root。别名是在 root 中定义的~/.bashrc,因此如果您以其他用户身份运行,则不会找到它。如果是这种情况,请将该alias行添加到您的用户~/.bashrc或切换到 root。

  2. 您以 root 身份运行,但未运行bash。以 root 身份登录并检查 的输出echo $SHELL。如果不是/bin/bash,请使用chsh命令将其设置为 bash。

  3. 您以 身份运行,root但这是一个登录 shell(例如,如果您曾经使用ssh进行登录)。如果~/profile您显示的 不在 中/root,则.bashrc不会加载别名。登录 shell 会忽略,.bashrc这就是您在 中有这些行的原因.profile

    如果是根,则即使或存在.profile,仍可忽略。/root/.bash_profile/root/bash_login


更新

现在你已经提供了更多信息,我可以告诉你问题实际上是 3。所以,你通过 ssh 连接,这意味着你正在运行登录 shell。这些 shell 不会读取,.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 inman bash`:

当 bash 作为交互式登录 shell 或使用 --login 选项作为非交互式 shell 调用时,它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它按照顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,然后从第一个存在且可读的命令中读取并执行命令。 启动 shell 时可以使用 --noprofile 选项来抑制这种行为。

因此,最简单的解决方案是合并文件。添加从.profile.bash_profile或的行反之亦然。如果您选择在合并后将以下行添加~/.bash_profile到 ~/.profile , make sure you delete~/.bash_profile`。


无论出于何种原因,别名永远无法用于您的脚本。运行脚本时,bash 被调用为非交互式、非登录 shell,并且和都~/.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

答案2

您需要将 mysql 的 bin 添加到系统的 $PATH 中。您可以通过 type 查看 $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

相关内容