我正在尝试使用bash脚本将新别名传递给.bash_aliases然后源.bashrc:
#!/bin/sh
FIRST=$1
SECOND=${2:-cd `pwd`}
if [ -z $1 ]
then
cat ~/.bash_aliases # no arg, show aliases
else
echo alias $FIRST="'$SECOND'" >> ~/.bash_aliases
. /home/andreas/.bashrc
fi
. /home/andreas/.bashrc
部分不起作用。
关注this我尝试以这种方式运行脚本. ./myscript
。
关注this我尝试在PS1='foobar'
行之前向脚本添加. /home/andreas/.bashrc
。
都没有效果。
答案 0 :(得分:3)
当你说“不起作用”时,我认为你的意思是它实际上并没有将别名放在你的交互式shell中。那是因为这个脚本在子shell中运行。当您获取.bashrc时,它会在子shell中安装别名。然后子shell退出,然后返回交互式shell。无法从子shell修改父shell的环境。
也就是说,如果这段代码是从你父shell中的一个函数运行的,而不是在一个子shell中运行,你就可以全部设置了。将此函数放在.bashrc
中function addalias
{
FIRST="$1"
shift
SECOND="$@"
if [ "${FIRST}" == "" ]
then
cat ~/.bash_aliases
else
echo alias "$FIRST"="$SECOND" >> ~/.bash_aliases
alias "$FIRST"="$SECOND"
fi
}
答案 1 :(得分:1)
那是因为您在单独的 shell进程中运行此脚本。 .
命令执行,但随后脚本退出,当前shell 根本没有更改。
将此脚本放入〜/ .bash_aliases文件中的函数中。这样你的当前shell将会更新。