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)

Ответ на: комментарий от RazrFalcon

В вашем мире существует что-либо кроме жабы?

Groovy, JRuby, Jython, JLisp, Clojure - выбирай.

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

ipython - надстройка над питоном. Им можно запускать как обычные питоновские скрипты так и скрипты с айпитоновскими расширениями.

$ echo '!ls /var' > t.ipy
$ ipython3 t.ipy 
cache	lib  local  lock  log  mail  opt  run  snap  spool  tmp

Иди просто почитай документацию, ок?

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

Доку я уже прочёл. Но ничего интересного там не нашел. Проще xonsh использовать.

RazrFalcon ★★★★★
() автор топика

В общем xonsh пока что выглядит самым удобным вариантом. Но всё равно не идеал.

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

which grep. Не встроенная, но не вижу проблемы.

command -v grep (стандарт согл. 1003.1-2008). Хватит советовать говно.

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

А xonsh выглядит действительно вкусно

Aswed ★★★★★
()

Попробуй ансиблю, там только богоподобный yaml.

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

Не обратил внимания. Я его как shell не ставил.

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

Например тем что это не shell builtin, след-но, с другими shell builtin, функциями, алиасами она работает никак или через жопу.

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

работает никак или через жопу

Что это значит? Иначе говоря, в какой конкретно ситуации оно будет менее удобно, чем command -v?

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

в какой конкретно ситуации оно будет менее удобно, чем command -v?

/usr/bin/git перекрыт одноимённой функцией, для облегчения работы с ключами от ssh. which знает только о /usr/bin/git, command -v знает о функции.

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

ion выглядит вкусно. Но linux only (пока что), сыро и ненужный end. Ну и нет отдельно типа для путей, что для меня очень важно.

По ссылкам ещё наткнулся на oilshell. Но пока что даже доки нет.

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

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

anonymous
()

Почитай мою тему, тоже искал, однозначного ответа не нашёл. Вообще считаю PowerShell хорошим языком, но под вендой. Вроде как он недавно стал кроссплатформенным, под линуксом не пробовал, можешь посмотреть в эту сторону, если нет религиозных предрассудков.

Legioner ★★★★★
()

Разве в bash проблема ?
Входные параметры не проверять можно в любом языке

x905 ★★★★★
()

что в Bash у вас вызывает самую сильную боль

  • всё есть текст, даже таблицы, ага
  • вездесущие кавычки
  • все, что после ${var — лютый песец
  • куча ловушек, приходится кодить в обнимку с манами и SO
  • обмен данными между функциями через потоки ввода/вывода или через глобальные переменные
  • мало возможностей и eval как единственное средство метапрограммирования
  • приходится самостоятельно реализовывать всякую элементарщину
anonymous
()

Perl ;)

`ls -l`;

(split /\./, 'text.txt')[1];

join '/home', 'usr';

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

если нет религиозных предрассудков

Есть.

RazrFalcon ★★★★★
() автор топика

Напиши свой на расте

Deleted
()

интересно было бы услышать что в Bash у вас вызывает самую сильную боль

в bash самую сильную боль и желание нанести увечья вызывают люди, которые на него гонят, не удосужившись выучить

Я бы, например, не отказался бы от встроенной фичи для проверки существования субкоманд, типа require grep

command

ananas ★★★★★
()

ruby. перетащил на него свои скрипты с python.

но от баша не отказался - для простых сценариев он идеален

Ford_Focus ★★★★★
()
Последнее исправление: Ford_Focus (всего исправлений: 1)

Есть подозрение, что ты хочешь невозможного. Поясняю. Есть языки, в которых удобно писать данные, и в них отвратительно пишутся программы. Есть наоборот. Вероятная причина - удобных мест в синтаксисе на всех не хватает. Например баш прекрасен(относительно), пока в нём нет ничего, кроме данных(имён программ и их параметров). Но логика, невпихуемая в трубы из вышеуказанного *вынуждена* выглядеть как куча мусора - удобные представления отобраны строками. Наоборот питоны - удобно писать программы, но весь удобный синтаксис занят переменными, потому данные ужасны.

Похоже, совместить всё в одном не получается. Можно попытаться растащить разные компоненты по разным файлам с разными синтаксисами, и собрать результат из команд и палок. Получится вагон файликов и форсированная изоляция компонент, тоже не всегда удобно.

Короче, счастья нет.

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

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

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

в bash самую сильную боль и желание нанести увечья вызывают люди, которые на него гонят, не удосужившись выучить

Кто сказал сишка?

RazrFalcon ★★★★★
() автор топика

Так для таких задач на компилируемом языке можно бинарники лепить и не париться с синтаксисом баша. Выучил несколько башевых фич и шмаляй ими из бинаря, а всю обработку делай на любимом ЯП:)

Napilnik ★★★★★
()

башу синтаксис подружелюбнее. блоки с фигурными скобками. условия типа == !=. и не нать никаких питонов джаваскриптонов.

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

Шило на мыло, во время высокоуровневых но компилируемых в натив языков.

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

Ассемблер же, ну. Особенностей современных процессоров учить не переучить.

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

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

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

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

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

anonymous
()

Тут вся надежда только на Поттеринга.

Он должен обратить свой взор на Shell'ы и сделать свой: единый и самый функциональный.

Надеюсь, что недавняя уязвимость в баш-лапше, возможно написанная каким-то неадеквантным фанатиком замшелой Unix-скриптоты, позволит красношапке сделать выводы насчёт нужности Bash'а в своих продуктах.

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

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

Дайте две.

anonymous
()

Ещё интересно было бы услышать что в Bash у вас вызывает самую сильную боль.

Отсутствие стека, функцию нельзя вызвать нормально и вернуть значение из нее. На втором месте идет экранирование символов.

anonymous
()

На моей позапрошлой работе (где нужно было массово управлять очень разными серверами и виртуалками) для этого использовали javascript. Но каждый бинарник, который нужно было вызывать, нужно было обернуть в javascript-функцию, которая имела осмысленные параметры. Что-то типа

grep str `cat -v a.txt b.txt`
превращалось в
print s.grep({
  pattern: "str",
  files: 
    s.cat({
      display_non_printing_characters: true,
      files: ["a.txt", "b.txt"],
    }).o.split(),
}).o.str();
Если привыкнуть, вполне читабельно. Позже добавлялись обертки, которые отдавали вывод соответствующих системных команд в структурированном виде (типа sx.ip_addr_list({}) -> {"lo": {"addr": [{ip: "127.0.0.1", netmask: "/8"}, ...]}, но таких оберток расплодилось подозрительно много.

Изначальная идея, как я понимаю, была в том, чтобы из этого js генерить правильный эскейпящийся баш, но это не взлетело, поэтому просто был блоб, который содержал в себе v8, волшебные объекты s/sx, и умел выполнять такие вот скрипты.

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

ion выглядит вкусно. Но linux only (пока что), сыро

Пулреквесты where?

и ненужный end.

Кот ненужный, ты ненужный, лол. Это шелл, а не питон.

Ну и нет отдельно типа для путей, что для меня очень важно.

И составляеш RFC @ и шлёш свои пулреквесты.

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

Мне вот синтаксис массивов в ion не вполне по нраву, например. Прочее же там хорошо.

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