如何确定shell脚本文件是否来自Bash

hel*_*jie 10 bash shell

我想知道如何确定脚本文件是执行还是源.

例如,

# Shell script filename build.sh
if [ "x$0" = "xbash" ]; then
    echo "I am sourced by Bash"
else
    echo "I am executed by Bash"
fi
Run Code Online (Sandbox Code Playgroud)

如果我输入

source build.sh
Run Code Online (Sandbox Code Playgroud)

它将输出我来自Bash.

如果我输入

./build.sh
Run Code Online (Sandbox Code Playgroud)

它会输出我由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
Run Code Online (Sandbox Code Playgroud)

tri*_*eee 10

如果由另一个脚本提供,它不起作用.我会走另一条路;

test "X$(basename -- "$0")" = "Xbuild.sh" || echo Being sourced
Run Code Online (Sandbox Code Playgroud)

更新:为两个字符串添加了X前缀.

更新:添加双破折号到basename调用.