我想知道如何确定脚本文件是被执行还是被引用。
举个例子,
# 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
它将输出I am sourced by 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
bash build.sh
运行脚本。另外请注意,脚本可能会自我引用——这有点愚蠢,但是可能发生。 - user123444555621bash build.sh
,我的解决方案仍然有效。 - hellojinjiebash
,否则你会感到困惑! - Jonathan Lefflerx
标记来防止空字符串。 - chepner