运行后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
这里可能存在一些问题。
您没有以 的身份运行
root
。别名是在 root 中定义的~/.bashrc
,因此如果您以其他用户身份运行,则不会找到它。如果是这种情况,请将该alias
行添加到您的用户~/.bashrc
或切换到 root。您以 root 身份运行,但未运行
bash
。以 root 身份登录并检查 的输出echo $SHELL
。如果不是/bin/bash
,请使用chsh
命令将其设置为 bash。您以 身份运行,
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 in
man 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