@Buscar웃: нет часы виджеты-я не использую никакие виджеты на все. Re: в батареи: ты имеешь в виду, что это предупреждение, чтобы сказать мне, чтобы отсоединить шнур, потому что мой аккумулятор полностью заряжен? Я постараюсь, чтобы увидеть, если есть какая-то связь с уровнем заряда батареи... Не могу воспроизвести это и для меня это работает с `метод exec=env в файл foo=бар=фу /home/user/test/test.sh`. Где test.sh` Эхо двух переменных `фу` и `бар`. Возможно, вы захотите написать сценарий как альтернативу и назвать это сценарий в своем `.рабочий стол` запись. Походы за пределами в отличие от кемпинга внутри? Строго говоря, вы могли бы использовать `набор -Ф; стандарту IFS=$'\п'; в строке $(Сат файл); не ...; это делается, и вы получите, чтобы прочитать файл построчно, но я не уверен, что это очень приятно. Ну, это больше.

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

Этот ответ рассказывает о том, почему ведение журнала сеансов SSH локально так сложно.

Проблемы со скриптом я нашел до сих пор:

  1. Многострочные команды вызывают вопросы:

    • Если вы вызываете через многострочный элемент в удаленной истории (с вверх/ вниз), он будет регистрировать элемент истории, а не последних команд. Вы можете избежать этого путем удаления из Баш истории любых многострочных команд сразу после того, как они используются.
    • Регистрируются только в первой строке многострочной команды.
  2. Прикованный сеансов (через СШ или Су команд на удаленном конце) привести хронологию в записи прокрутили-прошли команды вместо реальных команд

  3. Регулярные выражения могут быть улучшены и могут быть изменены для определенных средах:

    • Я чит путем преобразования непечатаемые символы с кошкой -в перед началом очистки. В результате, действительный контент может быть удален, если вы когда-либо использовать строки типа ^[[ в вашей команды.
    • Иногда вы получаете дополнительный вход вход перед командой, например, если страницы очень быстро через историю. Это, как правило, сопровождается "^м" до реального командования и, таким образом, может быть снят при желании.
    • Другие управляющие символы, которые иногда происходят. Я оставляю их всех до тех пор, пока я знаю, что можно безопасно удалить. ^М как я уже говорил-это полезно для обнаружения поврежденных регистрируется вход и ^С будет сказать вам, если команда была прервана.
    • Быстрое регулярное выражение может быть изменен для конкретного приглашения, и я мог представить, что разных удаленных средах может иметь различные модели управления персонажем.
  4. Не SSH bash-команда завершения, например для хоста. Вы можете получить Баш завершения, если вы псевдоним этот скрипт для СШ с псевдонимом СШ="sshlog"

Исходный сценарий и монтаж:

Для того чтобы установить, вставьте следующее в ~/bin и/sshlog и сделать исполняемым. Звонить с sshlog <СШ параметры команды>. При необходимости псевдоним 'СШ' в пользователя .файл bashrc.

#!/бин/Баш
# Обертка для СШ команду, которая производит меткой журнал всех команд СШ
объявить -Р логфайл=~/журналы/СШ.журнал
объявить -R описание="sshlog-${$} ${@}"
объявить -Р вкладке=$'\Т'

каталога журнала=`каталог ${журнала}`
[ -д ${каталога журнала} ] || команды mkdir "${каталога журнала}";

clean_control_chars() {
 в то время как ИФ= читайте -Р линии; делать
 # удалять известные управляющие символы. Оставьте время для отдыха.
 # строка=$(Эхо "${линия}" | Е С/\^\[\[К//Г') # неизвестный герой: ^[[к
 # строка=$(Эхо "${линия}" | СЭД с/\^\[\[[0-9]\+[п]//г') # данные генерируются вверх/вниз, окончание строительства - например, ^[[2Р
 строка=$(Эхо "${линия}" | СЭД с/\^\[\[[0-9]*[С-З]//г') # предоставление прочих ^[[..
 # анализировать характер делеции (backspaces)
 во время [[ $(Эхо "${линия}" | грэп -е --цвет=никогда '.\^Ч') != "" ]]; делать
 строка=$(Эхо "${линия}" | СЭД 'с/.\^Ч//')
сделано
 # удалять стандартные управляющие символы 
 строка=$(Эхо "${линия}" | Е С/\^М$//') # удалить конец строки маркер конца
 строка=$(Эхо "${линия}" | СЭД 'с/^\^г//г') # удалить маркер начала с начала
 # удалить ^Г из других мест - хорошая идея
 # строка=$(Эхо "${линия}" | Е С/\^г//г')
 # удалить все другие управляющие символы - не рекомендуется (много как ^С и ^М указать, какой раздел был обработан/ игнорируются)
 # строка=$(Эхо "${линия}" | Е С/\^[А-З]//г')
 Эхо ${линия};
сделано
}

filter_output() {
 в то время как ИФ= читайте -Р линии; делать
 # конвертировать непечатаемые символы и отфильтровать строки (в тестах на Ubuntu 14.04, ^Г указывает на быстрое начало)
 строка=$(Эхо "${линия}" | кот -в | грэп -Эо '[\^][г].*[\$#].*')
 [[ ${линия} != "" ]] && Эхо "${линия}"
сделано
}

format_line() {
 в то время как ИФ= читайте -Р линии; делать
сырая=${линия};
 строка=$(Эхо "${линия}" | clean_control_chars);
 запрос=$(Эхо "${линия}" | команда grep -по '^.*?(\$|#)[\с]*')
команда=${строка:${#запрос}}
 типа timestamp=`дата +"%г-%м-%д %ч:%м:%с %з"`
 Эхо -э "${метка}${вкладка}${описание}${вкладка}${запрос}${вкладка}${команда}"
сделано
}

Эхо "лесозаготовки SSH сессии: ${описание}"
Эхо "[начать]" | format_line >> ${журнала}
/usr/Бен/СШ "$@" | тройник >(filter_output | format_line >> ${журнала})
Эхо "[конец]" | format_line >> ${журнала}

Пример содержания журнала:

2014-06-29 23:04:06 -0700 sshlog-24176 дистанционного [старт]
2014-06-29 23:04:12 -0700 sshlog-24176 дистанционного Олег@ПДУ:~$ CD и проверить
2014-06-29 23:04:13 -0700 sshlog-24176 дистанционного Олег@ПДУ:~/тест$ ЛС
2014-06-29 23:04:14 -0700 sshlog-24176 дистанционного Олег@ПДУ:~/тест$ выход
2014-06-29 23:04:14 -0700 sshlog-24176 дистанционного [конец]