Все, что касается чистых функций и каррирования, а что нет, хорошо для языка с первоклассными функциями, но со сценариями оболочки, конвейеры — это то, что вам следует искать.
Когда дело доходит до того, что вы явно должны сказать :взять строку из ввода, выполнить X, вывести, вам нужно сделать шаг назад и повторно -изучить, что вы делаете. Большинство стандартных инструментов автоматически берут строки из ввода, выполняют X и выводят, поэтому обычно вам просто нужно получить правильный инструмент и правильный X. Так что, если вы окажетесь в ситуации, когда вы берете строку из ввода, используйте ее в качестве ввода для инструмент, который уже может брать строки из ввода, а затем захватывать вывод этой команды и повторно использовать его для вывода... что-то не так.
В данном случае это просто sed
, где X равно 's/begin-\([0-9]*\).end/\1/'
.
Кроме того, примечание:echo $(sed...)
бессмысленно, просто сделайте sed...
напрямую. Вы фиксируете вывод, используя подстановку команд, а затем... просто снова используете его в качестве вывода.
Вы можете указать tmux начать новую сессию и немедленно отключиться.
tmux new-session -d
Если вы дадите ему имя, вы сможете проверить, запущен ли уже сеанс.
tmux has-session -t session_name || tmux new-session -d -s session_name