我有多个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文件?
答案 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)"