LINUX.ORG.RU

Изолированное пространство для команд в bash

 , ,


1

3

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

Есть ли какой-то способ

С точность до наоборот: https://github.com/dvorka/hstr . Пользуюсь в основном favorites а history для экспромта.

anonymous
()

часто стрелками перемещаюсь по истории

^p ^n ^r

истории баша сильно нагажено

А зачем туда смотреть лишний раз?

Есть ли какой-то способ временно запрещать сохранение команд в баше?

Пробел перед коммандой.

 echo 123
anonymous
()
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

Обычно такая настройка уже включена. В историю не попадают команды, начинающиеся с пробела. Можно ещё обнулить переменную HISTFILE, это тоже отключит запись истории.

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

Можно ещё обнулить переменную HISTFILE

Сработает? Фига-себе. Красивый ход.

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

А зачем туда смотреть лишний раз?

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

Пробел перед коммандой.

Офигеть, прикольно!

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

Есть обратный поиск по командам по ^r.

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

unset HISTFILE

Написано «Отключает запись истории для текущего сеанса». Сеанс это новая открытая консоль (или вкладка в консоли)? Т.е. я ввожу команду один раз и обратно включать ничего не надо? Просто закрываю вкладку?

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

Написано «Отключает запись истории для текущего сеанса»

Ну так. Это оно.

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

Какая странная система нумерации. Первый сеанс (консоль была открыта днем) идет под номером 2026, сейчас вечером открыл 2ю консоль, сеанс под номером 17819, и каждая новая консоль прибавляет +5-10 к номеру. На времени завязано? На времени после инициализации системы?

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

На времени завязано?

На ID процесса. Пока ты открывал консоль - в системе еще что-то выполнялось.

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

номер сеанса?

Мож запилить счётчик самому в .bashrc:

bashcount=$(cat ~/.bash_count); let bashcount=$bashcount+1; echo $bashcount > ~/.bash_count
anonymous
()
Ответ на: комментарий от i-rinat

Можно ещё обнулить переменную HISTFILE, это тоже отключит запись истории.

unset HISTFILE

Спасибо, реально спасибо, ребята! Об этой команде я мечтал всю свою жизнь, даже не знаю как обходился (очень страдал). Вы лучше всех!

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

Об этой команде я мечтал

Вот к чему привело отсутствие необходимости правки инит скриптов. Иначе бы как минимум unset знал.

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

Linux оказуалили? Я слышал, что раньше надо было очень постараться, чтобы Linux заработал как надо, в конфигах покопаться, что-то скомпилить, а сейчас ничего этого не надо- поставил и пользуйся. А я бы, на самом деле, запилил подобную функцию прямо в GUI терминала - остановить запись истории/возобновить запись. Полезная штука.

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

Вот к чему привело отсутствие необходимости правки инит скриптов

Ну не знаю… Не помню, чтобы во время правки инит-скриптов мне нужен был unset.

i-rinat ★★★★★
()
Ответ на: комментарий от shkolnik_2019

раньше надо было очень постараться, чтобы Linux заработал как надо

В 2001 ставил ASP. В основном, работало. Правда, потом оказалось, что звука нет.

что-то скомпилить

Вот драйвер для AC’97 звуковой пришлось из интернета скачать и скомпилить. Но там всё просто было. Погуглил в Яндексе, нашёл исходники и подробную инструкцию. Шлёп-шлёп, звук заработал.

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

Не помню … мне нужен был unset.

И мне был не нужен. Но в некоторых скриптах он был и приходилось знать, что энто такое.

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

В историю не попадают команды, начинающиеся с пробела.

Лучше бы наоборот сделали так, чтобы в историю попадали только те команды перед которыми стоит пробел, а вообще внутренние команды для управления историей, например hison и hisoff были бы логичнее.

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

Все патчить bash. (разнесём вдребезги)

Ну ок, тогда сделаем башу опцию bash –mode которая будет управлять родительской сессией баша и в которую будут спрятаны все опции по управлению ведением истории и прочими вещами.

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

Хвала свободному ПО. Каждый может подправить код по своим нуждам.

i-rinat ★★★★★
()
Ответ на: комментарий от torvn77

тогда сделаем башу опцию

Да кто ж этим заниматься то будет? (это пока что bash-ненужнисты не прискакали, но, споконейс, прискачут).

anonymous
()

не засоряли основной файл bash_history

ну, ты, понимаешь, да?

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

Мож запилить счётчик самому в .bashrc:

Такие вещи надо делать с flock, иначе при старте с несколькими вкладками можно получить чёрте-что. И вообще, по каким книжкам вы bash изучаете? Ваши скрипты хороши были б 45 лет назад. Сейчас уже так давно никто так не пишет.

{ flock 9
    read -u 9 bashcount
    ((++bashcount)) 2> /dev/null || bashcount=1
    echo $bashcount > ~/.bash_count
} 9<> ~/.bash_count

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

Браво, vodz! Реально, молодец. Мож, книженцию по башику напишешь? Не сарказм, серьёзно. Много полезного почерпнул на лоре по твоим комментариям, как ни странно)

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

Ну и как это понимать?

книженцию напишешь, серьёзно.
как ни странно

Я, впрочем, догадываюсь как это понимать — это так уродует общение на ЛОРе, все эти «не скарказм» и без «как ни странно» чтобы себя не забыть похвалить и не опустить...

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

Такие вещи надо

Не уверен:

time bash -c "bashcount=$(cat ~/.bash_count); let bashcount=$bashcount+1; echo $bashcount > ~/.bash_count"

real	0m0.019s
user	0m0.000s
sys	0m0.000s
anonymous
()
Ответ на: комментарий от vodz

Нет, дело в том что обычно предложение написать книжку и подобное является издёвкой, то есть gnu_linux хочет сказать что он над тобой не издевается, а реально предлагает написать книгу(ну или страницу в википедии дополнить и поправить, это имхо будет лучше)

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

Не уверен:

Ну афигеть. Разговор был, что надо блокировать от параллельной записи, а в ответ time... Тем более, что в моём скрипте ещё фичи вставлены: не падать если в файле чёрте-что и создавать, если его нет.

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

Нет,

Да, диссонанс был именно в комплексе высказываний, приведенных в квотинге.

и поправить, это имхо будет лучше

В смысле поправить вики?

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

В смысле поправить вики?

Да, чего в странице по башу на виктпедии нет, то дописать.

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

Просто найденные ошибки и неточности исправить.

ПС. Это конечно если ты хочешь этим заниматься.

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

Ага, есть такое. Открывай новое окно в консоли и не выходя из сессии bash закрывай окно. В итоге получается фича, которая в истории не сохраняется. Этой фичей активно пользуются злоумышленники, тупо отключаются от сети и ssh с bash на удаленной машине не знают что делать без костылей. Также можно выполнить kill -9 $$ Дело все в том, что до завершении сессии все введеные команды хранятся в переменной и только при выполнении exit записываются в лог-файл. Содержимое переменной можно сломать в любой момент командой history -r. Корректный выход без записи истории в лог-файл: unset HISTFILE && exit Чтобы не писать это каждый раз можно создать алиас на выход. В итоге выход с записью в лог-файл ^D, а выход без записи - exit-hz

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

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

Афигеть прикольно! А еще конвейер есть в bash. И grep. Можно лог-файл bash’а грепать, а можно и выхлоп команды history.

Но вот так вылететь и залететь в пустое окно каждый может, а ты попробуй головой пработать^w подолбиться в стекло.

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

Не, без сарказма. Просто знания в «оформленном» виде реально были бы полезны. Не книга для новичков, а именно секреты, нюансы и трюки. Было б хорошо.

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

Сверхбыстрый ты, чтоле?

Угу. У меня при старте X-ов открывается console с сохранёнными вкладками. То есть в один момент запускается сразу несколько shell-ов.

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

в один момент запускается сразу несколько shell-ов.

Предупреждать надо. Нормальные люди такое не практикуют.

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

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

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

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

Предупреждать надо. Нормальные люди такое не практикуют.

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

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

Просто знания в «оформленном» виде реально были бы полезны. Не книга для новичков, а именно секреты, нюансы и трюки. Было б хорошо.

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

На данный момент я вот пишу программку блочного sed-а, то есть таким, каким бы я хотел, чтобы выглядел нормальный человеческий sed, с поддержкой многострочности, счётчиком для парсинга всяких вложенных блоков со скобочками. А то уже достало руками переформатировать книжки со (sam)lib.ru, переделывая мошковский html в нормальный вид для читалки. И прочие задачи по фильтрации html для сайта и изредко возникающих походу задач по парсингу всяких вычурных конфигов etc. Вот думаю, публиковать тут или ну его нафиг с такими анонимусами...

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

Если прямо ctrl-r не спасает, то уж лучше не unset делать, а перенаправлять историю в какой-нибудь другой (временный) файл.

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

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

Вы виляете попкой

Не тупи. Как бы объяснить. Аналогия: БелАЗ - универсальный грузовик. Ты хоть один в жизни видел? Я - нет.

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

Не тупи. Как бы объяснить. Аналогия: БелАЗ

Не надо меня учить, особенно тупыми аналогиями. Я сам кого хочешь научу. Правильная логика — писать можно по всякому, хоть тупо с проблемами, но надо знать проблемы. Я же не говорил, что надо писать только так, иначе оно не работает? Я показал проблему и порекомендовал решение. Ибо решение может пригодиться и для общего вида в других скриптах, когда надо уникальный счётчик, а не только для админов локалхоста с одним окрытым shell-ом, что не так для ТС-а.

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