我想知道如何确定脚本文件是执行还是源.
例如,
# 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调用.