Перейти к главному содержимому

Несколько приёмов для bash

Запуск python в зависимости от платформы

Требуется под linux запускать python как python3, а под windows как python

В скрипте можно сделать так:

if [[ "$OSTYPE" == "linux"* ]]; then
  PY=python3
else
  PY=python
fi

В дальнейшем коде запускать $PY вместо python.

Возврат кода ошибки

Чтобы вернуть код ошибки из одного и того же скрипта может быть два варианта:

  • скрипт запустили прямо из bash
  • скрипт вызвали из другого скрипта

Если скрипт запустили прямо из bash, то надо использовать exit, а если из другого скрипта, то с высокой долей вероятности требуется return.

Можно это делать автоматически:

### define $ret command as 'exit' if run standalone or
### define $ret command as 'return' if called from another script
[[ "$0" == "$BASH_SOURCE" ]] && ret=exit || ret=return

Потом это можно использовать примерно так:

mysupercommand || $ret $? 

или

$ret 1

Присвоить значение переменной если такой переменной ещё нет

[ -z "${OUTDIR}" ] && OUTDIR=__output

ну или полноценное условие если переменной не существует

if [[ -z "${USE_VAR}" ]]; then
  echo "### No USE_VAR defined"
else
  echo "### USE_VAR = ${USE_VAR}"
  ......
fi

Дополнение строковой переменной новой строкой

MYVAR=

MYVAR+=$'\n'
MYVAR+="string number 1"


MYVAR+=$'\n'
MYVAR+="string number 2"

echo "${MYVAR}"