来自bash脚本的源.bashrc

时间:2014-04-16 19:36:55

标签: bash alias

我正在尝试使用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

都没有效果。

2 个答案:

答案 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将会更新。