tl; dr script=$(readlink -e -- "${BASH_SOURCE}")
(đối với bash rõ ràng)
$BASH_SOURCE
trường hợp kiểm tra
tập tin đã cho /tmp/source1.sh
echo '$BASH_SOURCE '"(${BASH_SOURCE})"
echo 'readlink -e $BASH_SOURCE'\
"($(readlink -e -- "${BASH_SOURCE}"))"
source
các tập tin trong cách cư xử khác nhau
source
từ /tmp
$> cd /tmp
$> source source1.sh
$BASH_SOURCE (source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
$> source ./source1.sh
$BASH_SOURCE (./source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
$> source /tmp/source1.sh
$BASH_SOURCE (/tmp/source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
source
từ /
cd /
$> source /tmp/source1.sh
$0 (bash)
$BASH_SOURCE (/tmp/source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
source
từ những con đường tương đối khác nhau /tmp/a
và/var
$> cd /tmp/a
$> source ../source1.sh
$BASH_SOURCE (../source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
$> cd /var
$> source ../tmp/source1.sh
$BASH_SOURCE (../tmp/source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
về $0
trong mọi trường hợp, nếu tập lệnh có lệnh được thêm vào
echo '$0 '"(${0})"
sau đó source
kịch bản luôn được in
$0 (bash)
tuy nhiên , nếu tập lệnh được chạy , vd
$> bash /tmp/source1.sh
sau đó $0
sẽ là giá trị chuỗi /tmp/source1.sh
.
$0 (/tmp/source1.sh)
$BASH_SOURCE (/tmp/source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)