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

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

Это - источник проблемы. Я не уверен, существует ли очень, можно сделать для фиксации его, не изменяя программу, пишущую в канал. Вы могли использовать setvbuf() функция с _IOLBF отметьте для безусловного помещения stdout в строку буферизовал режим. Но я не вижу простой способ осуществить это на программе. Или программа может сделать fflush() в соответствующих точках (после каждой строки вывода), но тот же комментарий применяется.

Я предполагаю, что при замене канала псевдотерминалом, затем стандартная библиотека I/O думала бы, что вывод был терминалом (потому что это - тип терминала), и выровнял бы буфер автоматически. Это - сложный способ иметь дело с вещами, все же.

69
15.07.2011, 20:09
4 ответа

В ZSH:

Сначала вставьте setopt HIST_IGNORE_SPACE к Вашему ~/.zshrc. Теперь после входа в систему снова можно снабдить префиксом любые команды, которые Вы не хотите снабженный в истории a space.

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

  • HIST_IGNORE_SPACE не хранят команды, снабженные префиксом пространство
  • HIST_NO_STORE не хранят историю (ФК-l) команда
  • HIST_NO_FUNCTIONS не хранят функциональные определения
54
27.01.2020, 19:31
  • 1
    шанс @mmckinst отвечает на работы в zsh? или что-то как он? или возможно любая команда, которая включает команду | somecommand –  xenoterracide 19.01.2011, 12:57
  • 2
    AFAIK там не является никаким эквивалентом HISTIGNORE удара в zsh. –  dogbane 19.01.2011, 13:01
  • 3
    @xeno zsh обеспечивает функцию рычага preexec это может использоваться для этого. Если это возвращается ненулевой, команда не сохраняется в истории. –  Keith 19.01.2011, 16:20
  • 4
    , чтобы иметь zsh, игнорирует набор основных общих команд, я исказил их всех, чтобы иметь пространство впереди... для c (ls fg bg выход заданий ясный сброс); действительно исказите $c =" $c"; сделанный –  Will Norris 14.10.2012, 05:15
  • 5
    Для ленивых будущих читателей как я, которые не знают, как сделать это все же: setopt HIST_IGNORE_SPACE в ~/.zshrc –  Al.G. 06.04.2016, 20:27

При выполнении команды много раз Вы могли бы хотеть использовать историю своей оболочки, игнорируют функцию. Позволяет говорят, что у Вас есть secret.server.com, что Вы ssh к, файлы FTP к, и т.д. что Вы не хотите строки, которая упоминает сохраненный secret.server.com:

В bash Вы установили бы

HISTIGNORE="*secret.server.com*"

тогда как в zsh параметр называют

HISTORY_IGNORE="*secret.server.com*"

Можно перечислить несколько шаблонов с двоеточием, разделяющим их. Обратите внимание, что каждый шаблон подобран против полной входной строки, таким образом, Вы, возможно, должны были бы включать *. Например, следующее исключит fortune из истории, но сохранит fortune -l:

HISTIGNORE="*secret.server.com*:ytalk*:fortune"
HISTORY_IGNORE="*secret.server.com*:ytalk*:fortune"

С набором HISTIGNORE ничто соответствующее шаблонам, которые Вы перечисляете, не будет сохранено к .bash_history/.zsh_history и даже клавиша со стрелкой вверх, которая обычно повторно вызывает Вашу предыдущую команду, не будет работать, если она будет соответствовать Вашему шаблону.

27
27.01.2020, 19:31
  • 1
    шанс это работает в zsh? –  xenoterracide 19.01.2011, 12:56
  • 2
    Существует опция проигнорировать только строки, запускающиеся с состояния. Что-то как HISTIGNORE="^fortune*" проигнорировать fortune -l но сохраните myfortune? –  Bernhard 26.10.2012, 12:18
  • 3
    @xenoterracide, который Это делает, но параметр называют по-другому. Я просто отредактировал его в ответ. люди –  n.st 27.05.2017, 17:14

В ударе используйте HISTCONTROL переменная.

Установите его на HISTCONTROL=ignorespace (или HISTCONTROL=ignoreboth). С этого времени при начале строки с пространства это не будет сохранено в истории. Это старается не включать not-to-be-disclosed-command в некоторый конфигурационный файл.

Даже как этот это, оказывается, забывает добавлять пространство и затем хотеть возвратиться. Для удаления записи в истории использовать history -d <index>, с index число, найденное с history команда (первый столбец).

23
27.01.2020, 19:31

Самый легкий путь к одноразовому

$ $SHELL
$$ unset HISTFILE
$$ secret-command
$$ exit
$

где $ представляет подсказку начальной оболочки и $$ представляет подсказку подоболочки. Это работает в ударе и zsh; в ksh Вам нужно HISTFILE=/notwritable вместо этого. Обратите внимание, что то, что имеет значение, является значением HISTFILE когда файл истории записан, не, когда команда выполняется. Bash, ksh и zsh пишут в файл истории, когда они выходят (zsh, может делать это чаще в зависимости от конфигурации).

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

Другая возможность в zsh

% fc -p
% secret-command
% fc -P

fc -p продвигает текущий список предыстории на стек и запускает новый, который не связан с сохранить файлом. fc -P выталкивает тот несохраненный список предыстории от стека и забывает об этом в целом.

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

13
27.01.2020, 19:31

Теги

Похожие вопросы