tl;drscript=$(readlink -e -- "${BASH_SOURCE}")
(для bash очевидно)
$BASH_SOURCE
тестовые примеры данный файл/tmp/source1.sh
echo '$BASH_SOURCE '"(${BASH_SOURCE})"
echo 'readlink -e $BASH_SOURCE'\
"($(readlink -e -- "${BASH_SOURCE}"))"
source
файл разными способами
source
из/tmp
$> cd /tmp
$> source source1.sh
$BASH_SOURCE (source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
$> source./source1.sh
$BASH_SOURCE (./source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
$> source /tmp/source1.sh
$BASH_SOURCE (/tmp/source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
source
из/
cd /
$> source /tmp/source1.sh
$0 (bash)
$BASH_SOURCE (/tmp/source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
source
из разных относительных путей /tmp/a
и/var
$> cd /tmp/a
$> source../source1.sh
$BASH_SOURCE (../source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
$> cd /var
$> source../tmp/source1.sh
$BASH_SOURCE (../tmp/source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
$0
во всех случаях, если в скрипт добавлена команда
echo '$0 '"(${0})"
затем source
скрипт всегда печатается
$0 (bash)
однако , если скрипт был запустить , например.
$> bash /tmp/source1.sh
, тогда $0
будет строковым значением /tmp/source1.sh
.
$0 (/tmp/source1.sh)
$BASH_SOURCE (/tmp/source1.sh)
readlink -e $BASH_SOURCE (/tmp/source1.sh)
jq -r '.[]|select(.middlename|not).firstname'
Это дает вам имена для записей, у которых нет атрибута middlename
или где атрибут middlename
является логическим false
.
jq -r '.[]|select(has("middlename")|not).firstname'
Дал бы вам имена для записей, у которых нет middlename
.