假设我有一个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
别名可用。但是这不起作用。
答案 0 :(得分:2)
~/.bash_aliases
,这是避免在~/.bashrc
中放入过多内容的常见方便。如果您希望别名在新的Bash shell中可用,则必须在source ~/.bash_aliases
中的某处~/.bashrc
。一些流行的发行版(我相信Ubuntu是一个)默认情况下这样做。
如果您想在更改后自动source ~/.bash_aliases
,可以尝试在~/.bashrc
中添加此内容,以便在每个命令后对其进行处理:
PROMPT_COMMAND='source ~/.bash_aliases'
如果你的别名文件非常复杂,你可以使用inotifywait
加快速度,只在文件发生变化时重新加载。
在更改别名后加载别名的另一种方法是用另一个替换当前的shell:
exec "$SHELL"
底线,某些内容必须更改为自动加载新别名。 Bash中没有内置的运行时配置选项来执行此操作(即使这样,您也必须启用该选项)。