Комментарии 32
Я плохой линуксоид если не знал ни про одну из этих возможностей?
man bash
. Оно вообще занятное — массивы там всякие, сокеты, хитрые подстановки переменных.Использую, но там где надо что-то сложнее пары сравнений предпочитаю питон.
bash — это ужасная вещь. Он начала создаваться ещё в 70е, когда о безопасности никто не думал, а когда начали думать — то добавили костылей. Что при этом не удалось сделать — так это сделать так, чтобы простые методы были бы безопасны.
В результате любую задачу в bash можно сделать 10 разными способами из коготорых 9 простых — на самом деле не всегда работают.
Использовать язык, в котором такого количества мин нету где возможно — очень разумное решение…
Это похоже на путаницу, которую я почувствовал, когда понял, что локальная папка не была включена в более знакомую переменную PATH… но вы должны сделать это в переменной PATH, потому что вас могут обмануть, запустив фейковую команду из какого-нибудь скачанного кода.
Хотел я спросить на каком это вообще языке написано и зачем при переводе был искажен смысл, но когда я залез в оригинальную статью — там оказалась написана такая же чепуха.
На всякий случай поясняю о чем тут на самом деле речь: нельзя добавлять. в PATH, поскольку из-за этого могут переопределиться базовые команды шелла, как случайно, так и намеренно из-за действий злоумышленника. Так, вызывая ls
, хочется быть уверенным что это именно /bin/ls
, а вовсе не ./ls
просить убавить кликбейтное давление смысла нет?
как ощущать себя товаром и продолжать получать удовольствие?
Что не так с заголовком этого текста?
Предположим, это была бы написанная с нуля статья. Какое бы вы предложили название для неё?
Из четырех слов заголовка два оттуда.
Так вы предложите альтернативу то.
Я давно перешел на fish. Переучивание было немного утомительным. Некоторые вещи работают не так как в bash/zsh, и знания, за 20+ лет пробороздившие мозг, периодически приводят к попыткам написать как в bash.
Но одна вещь, которая вымораживает и из-за которой нет ни малейшего желания возвращаться. bash теряет историю. Да, у них в ChangeLog как минимум однажды писали, что эта проблема исправлена. Нет, не исправлена. Какие бы настройки истории я не использовал, рано или поздно возникает ситуация, когда я набираю Ctrl-R ansible-
, и не вижу ровным счетом ничего. А потом гляжу в историю, и вижу, что она в очередной раз обнулилась. Обычно это случается в самый неподходящий момент, когда ты пытаешься срочно что-то починить или задеплоить.
За много лет регулярные полные и частичные потери истории так меня достали, что я поклялся никогда не использовать bash в интерактивном режиме. Скрипты продолжаю писать на нем, так как он есть в каждой системе по умолчанию, даже в Windows уже.
Я решил её для себя сохраняя в файл, можно даже после каждой команды используя упомянутый тут PROMPT_COMMAND.
А как?
Тут синхронизируется история между всеми сессиями на хосте (это упрощённая версия, на самом деле синхронизируется история для всех сессий с одной домашней директорией, например хомяк на NFS)
Последняя строка срабатывает при каждом логине это «очистка» истории от «мусора» и не обязательна.
export HISTCONTROL=ignoreboth:erasedups
export PROMPT_COMMAND="history -n; history -w; history -c; history -r"
TMPFILE=$(mktemp); tac "${HISTFILE}" | sed -e 's/[[:space:]]*$//' | awk '!x[$0]++' | tac > "${TMPFILE}" ; cat "${TMPFILE}" > "${HISTFILE}" ; rm "${TMPFILE}"; unset TMPFILE
Это как раз то место, куда напрашивается применить sqlite :)
А вот это спорное утверждение. В бсд, например, по умолчанию нету, пока не вытянется с чем-нибудь по зависимостям. Более того, /bin/sh там ВНЕЗАПНО действительно указывает на sh.
Но это ещё ладно, его, неожиданно, по дефолту нету в Убунте, а под его именем скрывается dash, который хоть и совместим с башем в большей части, но бывают сюрпризы (иначе откуда бы я узнал, что там на самом деле не баш?).
Ну и да, в эмбеддед обычно бизибокс, который тоже не совсем баш.
Вообще, ситуация с этими подменами маразмотична, ИМХО, а тема башизмов давно избита. Поэтому я лично никогда не буду использовать эти 'неожиданные' переменные, дабы не выстрелить себе в ногу. И вообще, писать предпочитаю на sh.
PS: в интерактивной режиме баша ещё раздражает например, что по умолчанию стрелки вверх/вниз тупо листают историю, а pgup/pgdown работают не везде, и что ^W стирает весь путь целиком. Поэтому всю жизнь пользовался tcsh, zsh или fish.
10 лет на Линукс и с bash, а они продолжают меня удивлять. Спасибо за перевод, многое узнал впервые. Уж гораздо интереснее, чем типичные "n лайфхаков в командной строке", где в 100500-тый раз опишут что-то вроде Ctrl+R или "cd -"
Семь неожиданных переменных Bash