LINUX.ORG.RU

Переезжаем на Fish

 , ,

Переезжаем на Fish

6

3

Fish — это современный командный интерпретатор, недавно переписанный на Rust, который не требует особой настройки, поддерживая из коробки автодополнение и подсветку синтаксиса. Является лучшим Unix SHELL по версии Slant.

Установка

Установка Fish:

# Arch Linux, Manjaro и тп 
sudo pacman -S fish

# Fedora
sudo dnf install fish

# NixOS
nix-env -i fish

# Ubuntu и остальные Debian-based
sudo add-apt-repository ppa:fish-shell/release-4
sudo apt update
sudo apt install fish

Чтобы сделать fish оболочкой по умолчанию для текущего пользователя:

sudo chsh -s $(which fish) $(whoami)

Прочитайте справку после запуска fish:

help

Fisher — это менеджер плагинов для Fish:

# Из стандартного репозитория Arch
pacman -S fisher

# Вручную
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher

Конфигурация Fish

Основная конфигурация хранится в ~/.config/fish/config.fish:

if not status is-interactive
  exit
end

# Эти пути будут добавлены в $PATH единожды
fish_add_path -m ~/bin ~/.local/bin

# Определим переменные XDG
set -q XDG_DATA_HOME || set -U XDG_DATA_HOME $HOME/.local/share
set -q XDG_STATE_HOME || set -U XDG_STATE_HOME $HOME/.local/state
set -q XDG_CONFIG_HOME || set -U XDG_CONFIG_HOME $HOME/.config
set -q XDG_CACHE_HOME || set -U XDG_CACHE_HOME $HOME/.cache

# Различные настройки
# Используем привычные сочетания клавиш
set -U fish_key_bindings fish_default_key_bindings

# Двойное нажатие ESC не работает, если выставить меньше
set -g fish_escape_delay_ms 300

# В Yakuake вывод fetch не очень смотрится
if command -q fastfetch && ! string match -q -- "*yakuake*" (pstree -s -p $fish_pid)
  fastfetch
end

Настроить fish можно через веб-интерфейс:

fish_config

Отличия Fish от Bash и ZSH

Другой синтаксис

  • Нет $$ и прочих $*.
  • Не нужно экранировать переменные.
  • Нет HEREDOC.
  • Он напоминает Ruby с его end для обозначения окончания блока вместо fi, done, esac и тп.
  • Вместо $(command) нужно писать просто (command).
  • Кроме алиасов есть аббревиатуры, которые при вводе заменяются на полную команду.

Существует множество отличий с которыми лучше ознакомиться, прочитав документацию:

Переменные окружения

Fish использует собственный механизм управления переменными окружения, который отличается от bash и zsh. Основные типы переменных:

  • set VAR value — устанавливает переменную VAR только в текущей сессии.
  • set -x VAR value — делает переменную доступной для дочерних процессов (аналог export в bash).
  • set -gx VAR value — глобальная переменная, доступная во всех сессиях fish.
  • set -Ux VAR value — универсальная переменная, которая сохраняется в ~/.config/fish/fish_variables, те эту команду достаточно ввести в терминале один раз.
  • set -e VAR — удаляет переменную.

Пример установки переменных:

set -x PATH /usr/local/bin $PATH  # Добавляем путь в переменную окружения
set -Ux EDITOR vim                # Устанавливаем универсальную переменную

Для модификации $PATH есть функция fish_path_add:

fish_add_path $HOME/bin $HOME/.local/bin

Это аналогично установке универсальных переменных:

set -U fish_user_paths $HOME/bin $HOME/.local/bin

Темы и плагины

Темы можно ставить как через fisher так и Oh my fish.

Oh my fish содержит ряд адаптированных тем из мегапопулярного Oh my zsh, а так же дополнительно позволяет ставить плагины:

По всей видимости, oh my fish сломан и его лучше не использовать

curl -L https://get.oh-my.fish | fish

Поиск тем или пакетов:

omf search [ -t | -p ] name

Список тем:

omf theme

Установка темы:

omf install pure

Смена ее на дефолтную:

omf theme default

Через fisher так же можно ставить темы:

fisher install pure-fish/pure

Работа с плагинами через fisher:

fisher install plugin_name
fisher remove plugin_name
fisher list

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

$EDITOR $__fish_config_dir/fish_plugins

Пример плагинов для установки:

Gazorby/fish-abbreviation-tips
PatrickF1/fzf.fish
jethrokuan/z
jorgebucaran/autopair.fish
jorgebucaran/replay.fish
nickeb96/puffer-fish

Популярные плагины, которые можно поставить:

  • Gazorby/fish-abbreviation-tips: показывает подсказки для аббревиатур, помогая запомнить их.

  • PatrickF1/fzf.fish: интеграция fzf для удобного поиска файлов, истории команд и Git-веток.

  • acomagu/fish-async-prompt: асинхронно обновляет промпт. Бажный.

  • franciscolourenco/done: показывает десктопные уведомления о завершении длительных команд.

  • jethrokuan/z: быстрый переход по каталогам с использованием z.

  • jorgebucaran/autopair.fish: автоматическое закрытие скобок.

  • jorgebucaran/replay.fish: позволяет запускать команды Bash (replay ...).

  • joseluisq/gitnow@2.12.0: содержит функции для работы с git.

  • nickeb96/puffer-fish: добавляет привычный многим !! для быстрой подстановки предыдущей команды.

После редактирования списка запускаем обновление плагинов:

fisher update

При установке через fisher install плагины добавляются в тот список в файле, remove — удаляются. Если что-то удалить из него, то при вызове update будут удалены соответствующие плагины.

Ряд плагинов можно поставить через OMF:

omf update  # Обновим Oh my fish
omf install pyenv

Но лучше это делать через fisher:

fisher install oh-my-fish/plugin-<name>

Например:

fisher install oh-my-fish/plugin-pyenv

Прочее

Для работы с буфером обмена есть готовые функции fish_clipboard_copy и fish_clipboard_paste.

Автодополнения генерируются прямо из man-файлов:

fish_update_completions

Алиасы можно сохранять прямо из терминала с помощью флага -s:

# Заменим убогий ls на модный ROR-аналог
alias -s ls "eza --icons"

Добавляем sudo к текущей либо предыдущей команде:

function repeat_with_sudo
    # Получаем текущую команду из командной строки
    set -l cmd (commandline)
    
    # Если команда пустая, берём последнюю команду из истории
    if test -z "$cmd"
        set cmd $history[1]
    end
    
    # Заменяем текущую команду на "sudo <команда>"
    commandline -r "sudo $cmd"
end

funcsave repeat_with_sudo

# Это нужно добавить в конфиг
# Привязка к Alt+S
bind \es 'repeat_with_sudo'

# Готовый плагин для oh my fish
fisher install oh-my-fish/plugin-sudope

Переопределяем command not found:

function fish_command_not_found
  # Вместо этой строки нужно какую-то логику реализовать
  __fish_default_command_not_found_handler $argv[1]
end

funcsave fish_command_not_found

В арче, если установлен pkgfile, то все работает из коробки:

~
❯ python2
python2 may be found in the following packages:
  archlinuxcn/python2 2.7.18-12 /usr/bin/python2

Менеджер сниппетов Pet можно интегрировать с fish через плагин otms61/fish-pet:

fisher install otms61/fish-pet

Добавляем сочетание клавиш:

# Сочетания должны храниться в функции
function fish_user_key_bindings
  bind \cs 'pet-select'
end

# Сохраняем сочетания
funcsave fish_user_key_bindings

# Если сочетания заданы, то отредактируйте ф-ию
funced fish_user_key_bindings

Добавление аббревиатур:

abbr -a vimrc 'vim ~/.vim/vimrc'
abbr > ~/.config/fish/conf.d/abbrs.fish

Аббревиатуры заменяются на полные команды.

Заключение

Fish — простой шеллозаменитель для тех, кому лень заморачиваться с настройкой zsh. Он существует достаточно давно, но его фанатская база не является какой-то огромной, пользователи часто пользуются дефолтом, редко меняя шелл.

Что радует:

  • работает заметно быстрее того же zsh;
  • минимум настроек;
  • чистые конфиги;
  • более дружелюбный синтаксис и предсказуемое поведение с попыткой сохранить совместимость в отличии от какого-нибудь марсианского nushell.

Что огорчает:

  • мало плагинов;
  • странные баги, которые вылечить можно только сносом ~/.config/fish;
  • нестандартный синтаксис не позволяет копипастить команды без использования того же replay + нужно переучиваться.

Вердикт: стоит попробовать.

Полезные ресурсы

Дополнительные плагины и информация:

Полезные статьи про fish:

★★★

Проверено: dataman ()
Последнее исправление: rtxtxtrx (всего исправлений: 30)
Ответ на: комментарий от rtxtxtrx

Что он табличками что-то выводит ничего не значит.

TUI все это дело отображает с помощью псевдографики

тут разве нет противоречия?

https://www.nushell.sh/assets/0_67_header-CCFeUsjF.png

https://www.nushell.sh/assets/0_67_vs_code-BEghWYga.png

https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRB7bonU6scTlbbnVo4bRi6ScW9Y0H8CzNe8g&s

https://www.nushell.sh/assets/0_21_line_chart-Bvz1nclA.png

gagarin0
()

Уже с fish на nushell переезжаем же?

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

Предлагаю исходить из геометрических соображений. CLI — одномерный случай, по стандартному потоку вывода можно перемещаться строго в одном направлении, для каждого символа мы можем сказать, что он правее или левее другого символа на сколько-то позиций. TUI/GUI — двумерный случай, взаимодействие с данными идёт не символ-за-символом, а по координатам. Соответственно, если в качестве координат выступают знакоместа терминала — TUI, если пиксели графического дисплея — GUI.

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

там не из чего исходить:

  • элементы tui, встроенные в нющель не делают из него tui, он так и остается щелью
  • tui используют ncurses или напрямую glibc, запускаются через терминал или эмулятор терминала, имеют типичные графические элементы типа окошечек и прочих рюшечек, реализованные через псевдографику (vim, htop и тп)
  • псевдографика - это буквы, цифры, знаки пунктациии, те текстовые символы, содержащиеся в шрифте

у гагарина какие-то проблемы с логикой. если я могу гавкать как собака, то я псом от этого не становлюсь… беда если он погроммист какой

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

Не работал с этим шеллом, так что воздержусь от суждений. Там псевдографикой только вывод команд оформляется или есть более сложные способы взаимодействия? В первом случае, в рамках моего подхода — это чистый CLI.

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

псевдографика - это символы юникода и тп. значки в nerd fonts и тп

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

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

CLI — одномерный случай, по стандартному потоку вывода можно перемещаться строго в одном направлении,

Не строго. Практически во всех современных CLI есть Readline/LibEdit.

Соответственно, если в качестве координат выступают знакоместа терминала — TUI, если пиксели графического дисплея — GUI.

Опять спорные случаи: Emacs с одной стороны (у которого по текстовым координатам могут быть картинки) и зелёный терминал мейнфрейма (у которого текст по пиксельным координатам) с другой.

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

если в качестве координат выступают знакоместа терминала — TUI, если пиксели графического дисплея — GUI.

Наверное, лучше критерий устройства ввода. Если для работы нужны стрелки, это TUI, если мышка, то GUI.

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

получается что nushell это и shell и TUI одновременно?

Да.

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

А $SHELL это просто интерпретатор, работающий с этим интерфейсами. Не обязательно bash, zsh, fish и прочие *sh - вполне можно использовать python, node, guile и как пользовательский шелл, и для отрисовки TUI.

От реализации программы на её интерпретаторе зависит, является она TUI или CLI. git например ругается, если его в тупом терминале запустить, но всё равно работает, а какой-нибудь mc будет абсолютно неюзабельным.

Твой nushell при запуске в dumb terminal корёжит, то есть у него TUI.

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

TUI это подвид CLI,

Тогда в любом TUI должна была бы быть командная строка. Но это, очевидно, не так. Есть TUI, где командной строки нет, например aptitude.

Твой nushell при запуске в dumb terminal корёжит, то есть у него TUI.

Интересный критерий. ls --color тоже уже TUI?

И интерфейс типа adduser или make config я бы отнёс скорее к TUI, чем к CLI, так как команд нет, но требования выбрать из пунктов есть.

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

я считаю что наоборот, CLI это частный случай TUI

Иногда даже GUI. Например, AutoCAD.

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

Судя по вашим рассуждениям, для вас CLI это промпт.

Так можно договориться до того, что у телеграма CLI.

В моей картине мира CLI это stdin, stdout и stderr.

И TUI тоже работает на их основе, только более хитро.

А GUI это уже совершенно другое, твёрдо и чётко.

Это всё при условии, что речь идёт про linux/unix.

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

Для меня CLI поле ввода, через которые можно подавать произвольные команды.

У телеграма CLI нет, он только текст сообщения воспринимает, а у IRC есть.

Stdin и прочее это не CLI, а shell. Их можно использовать и просто в программе. А CLI может быть и на основе другого языка. От tcl до питона.

TUI тоже нынче очень редко работают через потоки. Обычно используют библиотечные функции.

И GUI тоже бывает через потоки. Например, TkSmb.

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

ты можешь и хромиум как shell назначить, но он шеллом от этого не станет. в юниксовой терминологии щель должна обрабатывать логин и логаут, уметь в пайпы, иметь промпт историю команд, поиск по ним и подстановку… питон точно не щель. хотя у него есть промпт и история как у почти любого интепретируемого языка кроме жабы, старательно притворяющейся убийцей C++

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

cli и prompt - это схожие категории за исключением того, что для cli используется декларативный язык какой-то, в то время как в промпте у нас полноценный язык с функциями, циклами и тп. не помню как там утилита для насьройки вайфай называктся. вот у нее cli или тот же parted. а cfdisk уже tui

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

ты можешь и хромиум как shell назначить, но он шеллом от этого не станет.

Я этого и не утверждаю.

питон точно не щель. хотя у него есть промпт и история как у почти любого интепретируемого языка

Да, но CLI. Даже ed является CLI (одним из самых старых).

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

cli и prompt - это схожие категории за исключением того, что для cli используется декларативный язык какой-то, в то время как в промпте у нас полноценный язык с функциями, циклами и тп.

В смысле, shell не cli? Неожиданный поворот.

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

Stdin и прочее это не CLI, а shell.

По-моему это более низкоуровневые вещи, а shell это просто привычный интерпретатор для кожаных мешков.

Их можно использовать и просто в программе.

Вот в guile есть похожие процедуры open-pipe и open-pipe*, которые отличаются тем, что одна вызывает программу опосредованно через shell, а вторая напрямую:

‘open-pipe’ runs the shell COMMAND using ‘/bin/sh -c’.
‘open-pipe*’ executes PROG directly, with the optional ARGS arguments (all strings).

Вот этот самый вызов напрямую с аргументами и подключением к streams - что это, если не CLI?

Ведь тут нет терминала, промпта, шелла и кожаного мешка.

Я не троллю если что, самому уже интересно. Вроде суть все понимаем, но явно есть путаница в терминологии.

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

Подвох ещё в том, что I в CLI можно расшифровать и как interface, и как interpreter.

А interface можно понять и как пользовательский, и как программный.

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

По-моему это более низкоуровневые вещи, а shell это просто привычный интерпретатор для кожаных мешков.

shell - это язык программирования с REPL и доступом к этим более низкоуровневым вещам.

Вот этот самый вызов напрямую с аргументами и подключением к streams - что это, если не CLI?

REPL с guile — это CLI. Если в этом CLI есть open-pipe, то этот REPL можно считать разновидностью shell.

Ведь тут нет терминала, промпта, шелла и кожаного мешка.

Конвейеры внутри шелла, а не шелл внутри потоков.

Шелл = промпт, позволяющий кожаному мешку использовать конвейеры.

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

А interface можно понять и как пользовательский, и как программный.

API командной строки? Это вообще как?

В голову приходит POP3 и IMAP. Но они с интерфейсом командной строки именно потому, что теоретически пользователь может подключится по телнету и работать прямо с ним. Поэтому не совсем API.

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

cli работает с командами. команда - просто набор аргументов,где первый путь до исполняемого файла, а остальные аргументы первой. у питона нет cli. в нем не команды, а операторы и операнды. ага. bash - это cli + еще что-то. как-то все забыли, что в баше if и [ - это изначально команды, а не операторы

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

где первый путь до исполняемого файла, а остальные аргументы первой

Не обязательно. В любом шелле есть куча команд, которые не являются именами файлов.

И шелл не является единственной реализацией cli.

как-то все забыли, что в баше if и [ - это изначально команды, а не операторы

[ – был командой. А if командой сделать нельзя. Также как set и while.

monk ★★★★★
()
19 апреля 2025 г.
Ответ на: комментарий от rtxtxtrx

Если кратко: если их не установить, то программы будут в корень хомяка срать, создавая там папки с точками в начале имени

Ответ неправильный.

У каждой XDG переменной есть значение по умолчанию, описанное в стандарте. Если программа написана в соответствии со стандартом, то она не будет срать в корень, даже если XDG переменные не установлены. Переменные нужны, чтобы перенести каталоги в нестандартное место. Например, если хочешь перенести ~/.cache в /mnt/cache/username, то надо выставить переменную XDG_CACHE_HOME=/mnt/cache/username. Если же ~/.cache устраивает, то устанавливать XDG_CACHE_HOME не надо.

debugger ★★★★★
()

Бестолковая статья.

Если бы я работал в Фиш, то переезжать на него мне не нужно — я уже там. Если речь идёт о переезде, то есть статья, вроде как, должна быть предназначена для тех, кто с Фиш ещё незнаком.

Для переезда на Фиш нужна какая-то мотивация, какая-то завлекаловка — описание плюшек, которые я получу после переезда на Фиш. Но в статье ни одного аргумента, оправдывающего переезд. Ну да, есть какие-то отличия в синтаксисе, какие-то темы и плагины. Но чем синтаксис Фиш лучше синтаксиса Баша? Что такое тема? Зачем нужны плагины?

Стоит ли менять шило на мыло? Ответа на этот вопрос в статье нет.

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

нежелание учить баш - лучшая мотивация… либо настраивать zsh. для того чтобы получить дефолтный фиштнужно штук 10 плагинов для zsh поставить, не учитывая возни с ковырянием конфигов

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

нежелание учить баш - лучшая мотивация…

Во-первых, вместо баша придётся учить фиш — какую-то гиковскую поделку, в то время как баш — де-факто стандарт.

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

И, для правильного понимания: я не говорю, что фиш бесполезный или плохой. Я говорю, что статья фиговая — если у фиша есть какие-то киллер-фичи, то ни одна из них не раскрыта.

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

в то время как баш — де-факто стандарт

в то время какивме истинные линуксоиды сидят с zsh (в тч главный - финиш торвальдс)

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

поставь фиш сравни его функционал из коробки с твоим любимым башем.

если у фиша есть какие-то киллер-фичи, то ни одна из них не раскрыта.

напиши свою «киллер-фичи баш о которых вы не подозревали». нет у него киллер-фичей. это просто шелл для людей… но я сижу с православного Z shell, так как fish бажный

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

в то время какивме истинные линуксоиды сидят с zsh (в тч главный - финиш торвальдс)

И что? А другие истинные линуксоиды своих жён убивают. Мне теперь свою убить что ли?

поставь фиш сравни его функционал из коробки с твоим любимым башем.

Не хочу. Меня баш устраивает. Это же ты взялся фиш рекламировать, но не сдюжил, а теперь пытаешься на меня же эту работу свалить.

напиши свою «киллер-фичи баш о которых вы не подозревали».

Не хочу. Опять: я тебя за язык не тянул, это была твоя идея — написать статью. Ну так и отдувайся за свою работу, а не перекладывай на читателя.

но я сижу с православного Z shell, так как fish бажный

Браво! Это всё, что нужно знать о переезде на фиш.

Счастливо оставаться.

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

Счастливо оставаться.

Ну, у ТС есть статья и про zsh, Настраиваем и используем ZSH вместо Bash, или превращаем терминал в раскраску.

Я не буду расписывать преимущества ZSH над Bash, отмечу лишь то, что ZSH используется по дефолту во многих дистрибутивах Linux, а также с недавних пор и в macOS (тут должна быть шутка про Торвальдса и его макбук). Главной причиной повсеместной замены bash на zsh является встроенный механизм модулей, поверх которого было навалено такое великолепие, как Oh My Zsh.

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

Ну, у ТС есть статья и про zsh…

Такая же бестолковая, как и эта. ТС описывает очевидные вещи: как установить зш (стандартно, с помощью системного пакетного менеджера), как сделать зш дефолтом (стандартно, с помощью утилиты chsh), далее выдаёт дезу про установку XDG-переменных; а когда дело касается зш-специфичных вещей, то ТС ограничивается краткими однострочными комментариями, которые человеку, не знакомому с зш, ничего не объясняют. Вот просто шедевр комментария: «Добавим какие-нибудь плагины». Серьёзно? Добавим какие-нибудь плагины?? Зачем?

Итого: если человек знает зш, ему статья бесполезна, если человек не знает зш, статья бесполезна тоже, ибо первая задача ознакомительной статьи — заинтересовать человека, объяснить новичку что он выиграет от использования этого инструмента, а уж какие-то мелкие детали можно найти и в документации.

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

нежелание учить баш - лучшая мотивация…

Может быть хорошая мотивация для изучения другого серьёзного и надёжного инструмента для автоматизации задач, но что-то мне подсказывает, что ни фиш ни зш на эту роль не годятся (кто-то пишет на них скрипты?).

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

у меня вот этот скрипт c шебангом #!/usr/bin/env zsh из-за бага в баше

    if [ ! -z $(pidof wf-recorder)  ]; then
        killall -s SIGINT  wf-recorder
        notify-send "video captured and saved"
    else
        WINDOWS=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"')
        WINDOW=$(echo $WINDOWS | slurp)
        FILE="$HOME/vid/$(date +%s).mp4"
        wf-recorder -g "$WINDOW" -p preset=ultrafast -p threads=0 -f $FILE
        curl -F "chat_id=-4640975963" -F "document=@$FILE" https://api.telegram.org/bot$TGBOT/sendDocument
    fi

вроде вот эта строка неправильно обрабатывается, но точно не скажу, не помню

WINDOW=$(echo $WINDOWS | slurp)
ripgrep
()
Последнее исправление: ripgrep (всего исправлений: 1)
Ответ на: комментарий от debugger

Мне знание баша не мешает использовать фиш. И «переехал» я на него когда уже достаточно хорошо знал баш. Баш от гиковской поделки отличает только приличный отрезок времени с тех времён, когда сам баш был гиковской поделкой.

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

У них же вроде совместимый синтаксис, но я не в теме, просто читал пару книжек про баш и себе кучку скриптов написал, так что чужой код читать для меня мука.

papin-aziat ★★★★★
()
Ответ на: комментарий от debugger

Не хочу. Меня баш устраивает.

ага, а те кого каменные орудия устраивали почему-то сохранились до наших дней лишь там, куда добраться сложно

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

напиши толковую раз умный

Во-первых, не хочу. Во-вторых, ты переходишь от обсуждения статьи к личности собеседника.

ага, а те кого каменные орудия устраивали почему-то сохранились до наших дней лишь там, куда добраться сложно

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

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

И «переехал» я на него когда уже достаточно хорошо знал баш.

Ну так помоги ТСу раскрыть читателям прелести фиша, а то ТС с этой задачей не справляется. Расскажи о том, какие фишки фиша ты используешь, как они облегчают твою работу. Что такого полезного есть в фише, чего нет в баше? Это было бы интересно почитать, а не вот это вот всё.

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

что баш — это каменное орудие

Думаю, большинство, использующих фиш и зш, все равно юзает скрипты на баше (во всяком случае я). Главная фича этих альтернатив - удобство использования в консоли/терминале (автодополнение по TAB с перебором команд, подстановка из истории и т.д. и т.п.), до которого башу как до Марса.


(У меня ZSH)

krasnh ★★★★★
()
Последнее исправление: krasnh (всего исправлений: 2)
Ответ на: комментарий от debugger

ты сам к ним перешел.

а я, видимо, должен этому верить

а я не считаю, что должен доказывать что-то очередному грубияну из интернета. для таких есть арч вики. ищи там среди воды нужное, если оно там вообще есть. еще генту вики могу посоветовать. удачи

rtxtxtrx ★★★
() автор топика
Ответ на: комментарий от papin-aziat

у фиша несовместим. скрипты и так работать будут, если у тебя шибанг там есть. zsh совместим за исключением индексов с 1

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

для баша oh my bash есть, но те, кто никогда не пробовали другие щели, навряд ли, когда-либо пытались настроить и баш. такие привыкли страдать и ломать глаза об текст без подсветки… тру-программизды же пишут код прямо в хекс-редакторе, а тут мелочь то какая

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

ты сам к ним перешел.

У нас все ходы записаны. Поэтому либо ты даёшь ссылку на коммент, в котором я непочтительно отозвался об авторе статьи, либо ты —балабол и пустобрёх.

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

Дитто. Либо ссылка на грубости, либо ты — балабол и пустобрёх.

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

для баша oh my bash есть

Попробовал - неплохая штука.

Удивительно, но поискал по ЛОРу другие упоминания «oh my bash», это первое и единственное, что странно, учитывая максимальную приверженность башу здешней публики, что следует из опроса, Какой командной оболочкой вы пользуетесь?.
Получается, удобства и нах башистам не нужны. «И так сойдет (c)». )

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

У ТСа была цель показать что всё, что кроме баша, ненужное ненужно. Ему невозможно помочь. А так фиш просто более явный и предсказуемый, в баше всё это есть, но неудобное и надо ещё не забывать кавычки везде ставить.

fish> set a 'a b c'
fish> python -c "import sys;print(sys.argv)" $a d
['-c', 'a b c', 'd']
fish> echo 'line1'\n'line2\n'\U1F431
line1
line2\n🐱
fish> set arr one 'two twohalf' three
fish> for line in $arr ; echo "item=[$line]"; end
item=[one]
item=[two twohalf]
item=[three]
fish> set spl (string split ';' 'x;y;z')
fish> echo $spl
x y z
bash> a='a b c'
bash> python3 -c "import sys;print(sys.argv)" $a d
['-c', 'a', 'b', 'c', 'd']
bash> printf 'line1\nline2\\n\U0001F431\n'
line1
line2\n🐱
bash> arr=(one "two twohalf" three)
bash> for line in ${arr[@]} ; do echo "item=[$line]" ; done
item=[one]
item=[two]
item=[twohalf]
item=[three]
bash> IFS=';' read -ra SPL <<< 'x;y;z'
bash> echo ${SPL[@]}
x y z
neumond
()
Ответ на: комментарий от krasnh

Получается, удобства и нах башистам не нужны.

Все эти «удобства» ваши я пробовал, и фиши с зшами, фигня полная. В баше хватает пару взмахов напильником и всё и так хорошо.

Я работаю в хорошо настроенной, хорошо интегрированной с терминалом среде под названием гном.

В своё время я столько просидел просто в чёрном окошечке на csh, а потом bash без всяких кастомизаций, что все эти цветастые нелепости и надуманные автодополнения мне просто не нужны, — они неудобны и бесполезны.

papin-aziat ★★★★★
()
Последнее исправление: papin-aziat (всего исправлений: 1)
Ответ на: комментарий от rtxtxtrx

для того чтобы получить дефолтный фиштнужно штук 10 плагинов для zsh поставить, не учитывая возни с ковырянием конфигов

нет конечно, ставишь prezto и все.

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

это всего лишь альтернатива oh my zsh… там темки, дополнения и тп… он fzf-tab не заменяет, и менеджером плагинов не является. не надо вводить людей в заблуждение

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