如何包含相对脚本源文件bashrc

时间:2012-07-26 18:42:26

标签: linux bash

我有多个bash文件。 我想写一个主bash文件,它将包含当前目录中所有必需的bash文件。 我试过这个

#!/bin/bash
HELPER_DIR=`dirname $0`
.$HELPER_DIR/alias

但是当我把下面一行放在我的手中时 $ HOME / .bashrc

if [ -f /home/vivek/Helpers/bash/main.bash ]; then
    . /home/vivek/Helpers/bash/main.bash
fi

我收到错误没有这样的文件./alias。文件别名在那里。如何包含相对bash文件?

3 个答案:

答案 0 :(得分:2)

改为使用$( dirname "${BASH_SOURCE[0]}" )

我将这两行添加到我的~/.bashrc

echo '$0=' $0
echo '$BASH_SOURCE[0]=' ${BASH_SOURCE[0]}

并开始bash:

$ bash
$0= bash
$BASH_SOURCE[0]= /home/igor/.bashrc

使用source(或.)或~/.bashrc启动脚本时,$ 0和$ BASH_SOURCE之间存在差异。

答案 1 :(得分:1)

你需要在“点”之后留一个空格

. $HELPER_DIR/alias

答案 2 :(得分:1)

如果您使用相对路径(例如$( dirname "${BASH_SOURCE[0]}" ))调用相同路径中的脚本,则

.会返回../myscript.sh

我使用script_dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )来获取脚本所在的目录。

以下是测试此功能的示例脚本:

#!/bin/bash
# This script is located at /home/lrobert/test.sh

# This just tests the current PWD
echo "PWD: $(pwd)"


# Using just bash source returns the relative path to the script
# If called from /home with the command 'lrobert/test.sh' this returns 'lrobert'
bash_source="$(dirname "${BASH_SOURCE[0]}")"
echo "bash_source: ${bash_source}"


# This returns the actual path to the script
# Returns /home/lrobert when called from any directory
script_dir=$( cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
echo "script_dir: ${script_dir}"

# This just tests to see if our PWD was modified
echo "PWD: $(pwd)"