bash脚本中的Source.bashrc

bash脚本中的Source.bashrc,bash,alias,Bash,Alias,我正在尝试创建一个bash脚本,将新别名通过管道发送到.bash\u别名,然后发送到source.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/.b

我正在尝试创建一个bash脚本,将新别名通过管道发送到.bash\u别名,然后发送到source.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
部件不工作

接下来,我尝试以这种方式运行脚本源代码/myscript

接下来,我尝试将
PS1='foobar'
添加到
之前的脚本中/home/andreas/.bashrc


两者都不起作用。

这是因为您在一个独立的shell进程中运行此脚本。
命令确实有效,但是脚本退出,并且您当前的shell根本没有被更改


将此脚本放入~/.bash_别名文件中的函数中。这样,您当前的shell将被更新。

这是因为您在一个独立的shell进程中运行此脚本。
命令确实有效,但是脚本退出,并且您当前的shell根本没有被更改

将此脚本放入~/.bash_别名文件中的函数中。这样,您当前的shell将被更新。

当您说“不工作”时,我想您的意思是它实际上没有将别名放入您的交互式shell中。这是因为该脚本在子shell中运行。当您使用source.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
}
当你说“不起作用”时,我想你的意思是它实际上并没有把别名放在你的交互式shell中。这是因为该脚本在子shell中运行。当您使用source.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
}

完美的只需要澄清一下:
shift
行是做什么的?啊
shift
放弃第一个参数,因此
$@
现在扩展到其余参数。这是一种表示参数2到N的简单方法。通过这种方式,alias命令可以在命令行中有多个单词,而不必引用它们!只需要澄清一下:
shift
行是做什么的?啊
shift
放弃第一个参数,因此
$@
现在扩展到其余参数。说出参数2到N是一种简单的方法。通过这种方法,alias命令可以在命令行中有多个单词,而不必引用它们