Как определить, есть ли файл оболочки script в Bash

Я хочу, чтобы определить, выполняется ли файл script или источник.

Например,

# Shell script filename build.sh
if [ "x$0" = "xbash" ]; then
    echo "I am sourced by Bash"
else
    echo "I am executed by Bash"
fi

Если я набрал

source build.sh

он будет выводиться, я получаю Bash.

Если я набрал

./build.sh

он будет выводиться. Я выполняю Bash.

В настоящее время я использую $0 для этого. Есть ли лучшая идея?

Вдохновленный Tripeee, я нашел лучший способ:

#!/bin/bash

if [ "x$(awk -F/ '{print $NF}' <<< $0)" = 'xcdruntime' ]; then
    echo Try to source me, not execute me.
else
    cd /opt/www/app/pepsi/protected/runtime
fi

Ответ 1

Это не работает, если получен другой script. Я бы пошел наоборот:

test "X$(basename -- "$0")" = "Xbuild.sh" || echo Being sourced

Обновление: добавлен префикс X к обеим строкам.

Обновление тоже: добавлена ​​двойная тире к вызову basename.