2012-07-26 1 views
2

J'ai plusieurs fichiers bash. Je veux écrire un fichier maître bash qui inclura tout le fichier bash requis dans le répertoire courant. J'ai essayé comme çaComment inclure le fichier source de script relatif bashrc

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

Mais je quand je mets ma ligne suivante dans $ HOME/.bashrc

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

Je reçois erreur pas ces fichiers de ./alias de. L'alias de fichier est là. Comment puis-je inclure le fichier bash relatif?

Répondre

2

Utilisez à la place $(dirname "${BASH_SOURCE[0]}").

I ajouté ces deux lignes deux mon ~/.bashrc:

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

et a commencé bash:

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

Il y a une différence entre 0 $ et BASH_SOURCE $ lorsque vous démarrez un script avec source (ou .) ou au ~/.bashrc.

1

Vous devez laisser un espace après le « point »

. $HELPER_DIR/alias 
1

$(dirname "${BASH_SOURCE[0]}") retours . si vous invoquez le script du même répertoire ou un chemin relatif si vous appelez à l'aide d'un chemin relatif, comme ../myscript.sh.

J'utilise script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) pour obtenir le répertoire que le script est en

Voici un exemple de script pour tester cette fonctionnalité.

#!/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)" 
Questions connexes