LINUX.ORG.RU
ФорумAdmin

Шелл с областями видимости

 ,


0

1

Очень плохо знаком со скриптами: есть ли шелл с поддержкой областей видимости, вроде:

if [ -x "$SOMEPATH/bin/executable" ]
then
    COMMAND=$SOMEPATH/bin/executable
    # область видимости COMMAND - локальная для if...else или if...fi
    ...
fi

В идеале еще бы что-нибудь вроде val COMMAND - то есть изменяемая/неизменяемая и модульность с импортами, но боюсь будет жирно.

Именно shell, не python, т.к. извращаться с subprocess не хочется.

COMMAND - переменная окружения, да.

Стоит потыкать что-то вроде perl5?

Deleted

Последнее исправление: merhalak (всего исправлений: 2)

А с чего ты взял, что в шеллах нет scopes? Просто дальше local не очень очевидно (скорее даже криво).

anonymous
()
Ответ на: комментарий от anonymous

Я просто тыкал только пока posix shell (/bin/sh -> dash), не bash.

Вроде scopes не заметил.

У баша уже все лучше?

Deleted
()
Ответ на: комментарий от Deleted

В sh есть local. Обращение за пределы области вроде как-то через eval делается. Но вообще не стоит с этим связываться, если кода больше десяти строк.

anonymous
()

Именно shell, не python, т.к. извращаться с subprocess не хочется.

xon.sh спасет тебя

t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от zolden

Дамп рабочей БД, архивация в zip (не gzip, так как дампом пользуются ещё и пользователи с win), рассылка zip по почте + отправка на sftp.

Задачка небольшая, просто слегка неудобно.

Deleted
()
Ответ на: комментарий от Deleted

Задачка небольшая, просто слегка неудобно.

Непонятна логика именно в вашем примере: зачем сохранять старое значение COMMAND, если скрипт таки нашел нужную команду для выполнения. Ну и в else, понятное дело, менять COMMAND вас же никто не заставляет.

bash, в отличии от dash, умеет так: «сохрняем» COMMAND[1]=$COMMAND; меняем и юзаем COMMAND=cmd1; после fi вертаем COMMAND=${COMMAND[1]}

vodz ★★★★★
()

Двачую сабшелл. Там можно и RAII наворотить (trap "..." EXIT).

anonymous
()
Ответ на: Subshell от d_a

Subshell

Надо только предупреждать, что это вещь весьма не бесплатная и удобная пока не понадобиться таки менять внешнюю к этому текущему subshell переменную.

Уж лучше себя пересилить и оформлять куски в виде функций с имеющимся в наличии механизмом local.

vodz ★★★★★
()
Ответ на: комментарий от Deleted

Как раз таки отсутствие local меня и смущало.

Ну у dash это бог знает когда уже есть. Вас не поймёшь, то вам poxis, то dash, то чисто bash-измы:

> У баша уже все лучше?

vodz ★★★★★
()
Ответ на: комментарий от d_a

Мало того, в pdksh и mksh это встроенный alias, в ksh93 можно определить самому аналогично, работает.

ABW ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.