LINUX.ORG.RU

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

 , ,


1

3

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

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

Сейчас уже так давно никто так не пишет.

Я же не говорил, что надо писать только так

Говорил.

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

Говорил.

Парсить о чём пишут надо учиться перед тем как выёживаться. Там было второе предложение, которое начиналось «и вообще» и далее по тексту. Это была уже следующая мысль, не о блокировке, а о стилистике вашего кода. Когда юзают v=$(cat...) вместо read, let вместо (())...

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

Ты нудный. Не стоит тебе книжки писать.

Книжки тем и хороши по сравнению с чатиками коментариев на ЛОРе, что вот таких ананимусов, которые вначале облажаются, а потом выкручиваются с «сам дурак» можно не брать в расчёт, а просто писать. И уж лучше нудная книжка с описанием всех возможных ситуаций, чем сборник тупых решений с кучей проблем, зато перемежающихся всякими заигрываниями с читателями.

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

А чем это плохо?

Вот у вас в файле гигабайт всякой фигни или вообще файла нет, а вам надо прочитать только одну строку и если там валидное число, то прибавить единичку. Теперь понятна разница?

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

уж лучше нудная книжка

Не тебе ж читать, верно?

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

Нет. При чем тут read?

Я понял так. Вместо v=$(cat…) предлагаешь read var < file. Или cat чего? Внезапно нужно лишь строку выдернуть. Также не понял про let и (()). let a=a+1 равноценно a=$(($a+1)) равноценно a=expr $a+1

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

Может лучше с sh совместимо чтобы было?

ash-совместимый: dash, bash, zsh, …

anonymous
()

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

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

Вот думаю, публиковать тут или ну его нафиг

Однозначно да. Но можно и не тут. Просто дай знать.

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

alias, определяющий HISTFILE.

??? «Не говори ГОП!»

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

Можно же в .bashrc сделать alias, определяющий и разопределяющий HISTFILE.

Ты хочешь сказать что переменная HISTCONTROL доступна и может управляться изнутри активной сессии?

А ведь действительно, конфиг баша то является скриптом на баше.

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

Нет. При чем тут read?

Что нет? Я объяснил, почему v=$(cat) во много раз хуже read.

Внезапно нужно лишь строку выдернуть.

Вот именно. Если там гигабайт мусора, то ваш cat его и всосёт в память. И ругнётся, если файла нет. Вы случайно не брат тутошнего анонима? Ну один в один ни слова парсить не умеете, но апломба...

Также не понял про let и (()).

Объясняю. Тут аноним попытался за умного сойти, квакнув о ash, но как всегда облажался. Ну так вот:

$ ash-.0.4
$ bashcount=0
$ let bashcount=$bashcount+1
let: arith: syntax error: "bashcount=0+1"
$ let $bashcount+1
1
$ exit
$ dash-0.5
$ let bashcount=$bashcount+1
dash: 3: let: not found
То есть оригинальный sh никогда не понимал = в let, его надо было вызывать как v=$(let expr). В ash>4 в том числе и с моей подачи там появился =, и пререименовался в dash, но и то глючный, а let сломали. Так же сломанный let в bash, вот там он действительно эквивалент (()), но эта эквивалентность несовместимый bash-изм, и правильно юзать posix-ный $(())

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

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

Это как их завести?

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

ash-.0.4

Да ты не просто нудный. Ты как запор.

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

В sh все мои примеры корректные. А то что cat’ом гиг всосать… Ну у меня на то фантазии не хватило. Я бы grep’ул строку. Или sed’ом. Или awk. Нафиг мне весь файл в переменной? Тем не менее, var=$(grep hz file) вполне корректный. Вопрос использования некорректный.

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

Каникулы…

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

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

Это не интересно - там деление есть, надо под pic8.

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

В sh все мои примеры корректные.

sh - язык программирования и интерпретатор. В нём, сюрьпрайз, есть специальная встроенная команда для чтения строки в список переменных. В интерпретаторе не может быть более оптимальнее и удобнее инструмента, чем встроенное в него средство. По определению. Не использовать её, а вызывать внешнюю команду через fork+pipe+exec, что и делает $() показывает незнание инструмента. Но это бывает, это простительно. Но пытаться доказать, что это правильно, что так и надо — это полный дебилизм, детсад «назло мамке отморожу ухи».

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

Мне не нужны твои тролльские коменты, тут до тебя уже предложили решение, и оно работает. А пространные советы давать, много ума не надо.

есть всякие поделки где управление сессиями уже решили за тебя

Ты даже не осилил назвать что это за «поделки», но коментов настрочил уже дофига. Твой КПД ниже плинтуса.

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

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

«И вы так говорите» (c) анекдот. Алхимики тоже, когда денег просили уверяли, что они знают средство как сделать золото. Только никому не скажут, а уж почему оно должно получаться, так и вообще их не интересовало. Хрень вы там какую-то проверили.

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

Лол, ну может когда изобретёшь этот велосипед - вспомнишь, что где то это слышал. Судя по тому что ты радуешься с пробела перед командой и HISTFILE - я не по-адресу. Почитай что ли man readline там много ещё интересных открытий будет гы.

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

Лол, ну может когда изобретёшь этот велосипед

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

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

Ну вот, а говорил я злой. Могу тебе в этот светлый день пожелать всю дорогу пользоваться готовыми решениями и не думать :)

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

Так и делаю. Ubuntu не компилял, программы из репозитория готовые, они работают на меня и выполняют мои задачи как мне надо. В этом и есть смысл технологий. Они работают на меня, а не я на них.

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

Они работают на меня, а не я на них.

В лине по этому поводу своеобразная шиза: Все проги априори считаются «недоделанными», а когда становятся «доделанными» и разработка останавливается, переносятся в разряд «устаревших». Поэтому в лине какбэ нету «доделанных» программ.

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

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

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

Может и хрень. Проверял именно в sh, а не в bash и уж тем более не в dash. sh у меня в FreeBSD. К тому же я не знаю, что мне принесёт read, а в моем коде все предельно ясно. То что он форкает и исполняет, это очевидно, ибо внешняя команда. Но иногда внешнее выполняется значительно быстрее и потребляет меньше ресурсов, чем встроенное в интерпретатор. В данном случае это именно так.

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

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

Для интерактивной работы лично мне больше нравится не sh, bash, zsh, а tcsh. Но для написания сценария я все же предпочту sh. Ну и пусть у него ряд ограничений, зато меньше неожиданностей, как bash.

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

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

Нет, такое не бывает никогда. Внешнее бывает быстрее, чем некий скрипт, потому что скрипт интерпретируется. Но встроенная команда и внешняя команда, вызываемая из скрипта - не бывает.

Может и хрень.
В данном случае это именно так.

Да вы больны.

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

Да, я болен. Насморк у меня. А ты bash’ист. Тебе не понять суть sh. Ты будешь кричать, что cat проглотит RAM’у, но тут же будешь защищать упоротые массивы на bash.

[code] cat ./var1 var=$(head -1 /usr/bin/su) echo $var

cat ./var2 read var < /usr/bin/su echo $var

time ./var1 строка вывода 0.000u 0.023s 0:00.10 20.0% 122+202k 8+0io 0pf+0w

time ./var2 строка вывода 0.000u 0.031s 0:00.03 66.6% 142+350k 5+0io 0pf+0w [/code]

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

Да, я болен. Насморк у меня.

Вы больны ментально. Только что дважды это доказав. Зарегившись и так и не смогши отказаться от привычного тупака ананимуса, да и в предыдущем комменте умудрившись в маленьком абзаце начать и кончить ровно противоположно. Я не доктор, но это вроде именно шиза.

А ты bash’ист. Тебе не понять суть sh.

Я начинал в 85 году, тогда не только bash, тогда и ash не было. Но повторюсь, в ash/dash есть мои правки. Я не только знаю и умею, я знаю и умею что там внутри.

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

Ну может для кого-то и не тянет.

Это стандартная фишка. Сначала называешь bash ЯП, а потом, как ЯП, опускаешь его ниже плинтуса. Но bash не ЯП. Сама история bash никакому ЯП не соответствует.

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