Как определить, есть ли файл оболочки 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
.