如何从perl / bash脚本加载.bash_aliases

时间:2014-07-08 10:58:37

标签: bash perl

假设我有一个perl脚本,可以设置bash_aliases,如下所示

源文件:bash_aliases.sh

alias w="cd /var/www"

install.pl

#!/usr/bin/perl
my $aliase_src= "${installation_dir}/bash_aliases.sh";
my $aliase_target="$ENV{'HOME'}/.bash_aliases";

if (! copy($aliase_src,$aliase_target))
    {
        print "Failed to copy file $aliase_src to  Destination:$aliase_target. Reason:$! .";
        die;
    }
[command required to load .bash_aliases file] 

我应该如下:

./install.pl 
w

我不想:

./install.pl
source ~/.bash_aliases
w

我无法找到加载这些别名的命令,这样一旦文件移动到主目录,这些别名应该可用于当前脚本(install.pl)以及所有其他脚本,而无需从命令行运行另一个命令,例如source ~/.bash_aliases. .bash_aliases

修改 使用PROMPT_COMMAND auto_load_aliases.sh(尝试关注l0b0,回答)

#!/bin/bash
echo  'alias test="echo tested"' > $HOME/.bash_aliases
export PROMPT_COMMAND="$HOME/.bash_aliases";

这也行不通:

./auto_load_aliases.sh
test

我期望auto_load_aliases.sh脚本设置PROMPT_COMMAND,一旦设置我有test别名可用。但是这不起作用。

1 个答案:

答案 0 :(得分:2)

默认情况下,Bash不会加载

~/.bash_aliases,这是避免在~/.bashrc中放入过多内容的常见方便。如果您希望别名在新的Bash shell中可用,则必须在source ~/.bash_aliases中的某处~/.bashrc。一些流行的发行版(我相信Ubuntu是一个)默认情况下这样做。

如果您想在更改后自动source ~/.bash_aliases,可以尝试在~/.bashrc中添加此内容,以便在每个命令后对其进行处理:

PROMPT_COMMAND='source ~/.bash_aliases'

如果你的别名文件非常复杂,你可以使用inotifywait加快速度,只在文件发生变化时重新加载。

在更改别名后加载别名的另一种方法是用另一个替换当前的shell:

exec "$SHELL"

底线,某些内容必须更改为自动加载新别名。 Bash中没有内置的运行时配置选项来执行此操作(即使这样,您也必须启用该选项)。