LINUX.ORG.RU

Ищу удобную альтернативу Bash

 , ,


1

3

Навеяно недавними новостями.

Собственно, я ищу примитивный, башеподобный язык для написания скриптов вида: выполнить n команд с парой условий.

Bash и его производные настолько ужасны, что тут даже обсуждать нечего. Легаси в 3-м поколении.

Python слишком многословен, особенно для запуска процессов и работы с путями. Возможно есть врапперы, но я сходу ничего не нагуглил. А это самые типовые задачи. Примеры:

# запуск процесса
run(['ls', '-l'])
# получение расширения файла
splitext("text.txt")[1][1:]
# конкатенация путей
join('/home', 'user')
И это с реэкспортом функций, что не канон.

Fish выглядит самым адекватным решением, но работа с переменными просто ужасна. Например создание списка: set -l mylist 1 2 3. Или инкремент счётчика set i (math "$i + 1"). Зато условия пофиксили.

Поэтому ищу или удобный скриптовый язык или либы для питона.

PS: Ещё интересно было бы услышать что в Bash у вас вызывает самую сильную боль. Я бы, например, не отказался бы от встроенной фичи для проверки существования субкоманд, типа require grep

★★★★★

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

ИМХО, пока просто никто не сделал хороший синтаксис. Мне не очевидно, почему должно быть или так или так. Понятно, что если в языке удобный синтаксис для вызова внешних программ со всякими трубами, то что-то пострадает, но не обязательно должен получиться такой ужас, как bash. Взять банальный условный оператор. Конечно прикольно, что даже условия проверяет внешняя программа test, но по факту это builtin, то бишь прикольная идея на практике была отброшена, оставив жуткий синтаксис. Почему бы не писать просто if $a == "1" { ..., без всяких [ или [[. Зачем нужен постоянный квотинг переменных? Ради одного на миллион случая, когда надо передать несколько параметров в одной переменной? Так надо для этого случая и придумать особый синтаксис, а для стандартного случая исключить возможность «расквочивания» и вытекания всякого. И никто тут не пострадает, скорей наоборот.

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

Почему бы не писать просто if $a == «1» { ..., без всяких [ или [[

Для совместимости с posix shell.

Зачем нужен постоянный квотинг переменных?

Ну вот такой синтаксис с подстановкой строк как есть. Это на самом деле очень удобная фича, если мозги не съел какой-нибудь пистон. Короче, принимайте шелл таким или не лезьте в это. Ты же не требуешь неосишку без скобок в if и точек с запятой, это глупо же, ну? Так и тут никто не откажется от posix shell, можете не фантазировать.

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

неосишку без скобок

Дайте две.

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

Ты же не требуешь неосишку без скобок в if и точек с запятой

Кто сказал Nim?

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

Это на самом деле очень удобная фича, если мозги не съел какой-нибудь пистон.

rc был без "", вроде немного потеряли

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

Почему бы не писать просто if $a == «1»

Потому, что поломается if grep, например.

Зачем нужен постоянный квотинг переменных

Иначе не получится использовать пробелы для разделения аргументов.

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