Можно получить доступ к удаленному использованию файлов fish://
или sftp://
с каждым приложением KDE. Например, можно соединиться с удаленным хостом с помощью файловых менеджеров как дельфин или Konqueror и после того каждого файла, который Вы нажимаете, будет открыто (в приложении KDE) как он, был файл на Вашем локальном диске. Архивы будут открыты в Ковчеге (KDE архивируют менеджер). И конечно можно открыть архивы непосредственно в Ковчеге (File -> Open -> sftp://remotehost/path/to/file
)...
Другой альтернативой, которую я знаю, что она работает, является Emacs... ;) Но перед попыткой его, необходимо посмотреть на кривую обучения Emacs... ;)
Я не думаю, что Вы действительно хотите это. Мой обычный рабочий процесс идет как это:
Теперь, если бы неудавшаяся команда не была сохранена в историю, то я не мог бы заставить ее легко назад фиксировать и работать снова.
Единственным путем я могу думать, чтобы сделать, это должно было бы использовать history -d
в $PROMPT_COMMAND
. Проблема с этим или любым подходом состоит в том, что невозможно сказать если команда, из которой выходят с ошибкой или завершенная успешно с ненулевым кодом выхода.
$ grep non_existent_string from_file_that_exists
$ echo $?
1
Хорошо иметь последний неверный комментарий, чтобы исправить его, но вскоре после этого он становится потенциально запутанным мусором.
Мой подход состоит из двух этапов: сохраняю команды, которые не работают, когда они срабатывают, и удаляю их позже.
error_handler() {
FAILED_COMMANDS="$(history | tail -1l | cut -c -5) $FAILED_COMMANDS"
}
trap error_handler ERR
trap command signal
выполняет команду
, когда один из сигналов
«поднят».
$ (команда)
, выполняет команду
и фиксирует ее вывод.
В случае сбоя команды этот фрагмент кода фиксирует номер истории последней команды, сохраненной в истории , и сохраняет его в переменной для будущего удаления.
Просто, но неправильно работает с HISTCONTROL
и HISTIGNORE
- когда команда не сохраняется в истории из-за одной из переменных, номер истории последней сохраненной в истории команды - предыдущая команда; Таким образом, если неправильная команда не сохраняется в истории, предыдущая команда будет удалена.
Немного более сложная версия, которая в этом случае работает правильно:
debug_handler() {
LAST_COMMAND=$BASH_COMMAND;
}
error_handler() {
local LAST_HISTORY_ENTRY=$(history | tail -1l)
# if last command is in history (HISTCONTROL, HISTIGNORE)...
if [ "$LAST_COMMAND" == "$(cut -d ' ' -f 2- <<< $LAST_HISTORY_ENTRY)" ]
then
# ...prepend it's history number into FAILED_COMMANDS,
# marking the command for deletion.
FAILED_COMMANDS="$(cut -d ' ' -f 1 <<< $LAST_HISTORY_ENTRY) $FAILED_COMMANDS"
fi
}
trap error_handler ERR
trap debug_handler DEBUG
exit_handler() {
for i in $(echo $FAILED_COMMANDS | tr ' ' '\n' | uniq)
do
history -d $i
done
FAILED_COMMANDS=
}
trap exit_handler EXIT
Объяснение:
При выходе из Bash для каждого уникального номера истории удалите соответствующую запись в истории,
{ {1}} затем удалите FAILED_COMMANDS
, чтобы не удалять команды, унаследовавшие номера истории от уже удаленных команд.
Если вы уверены, что FAILED_COMMANDS
не будет содержать дубликатов, вы можете просто перебрать его
(т. Е. Написать для i в $ FAILED_COMMANDS
). Однако, если вы ожидаете, что он не будет отсортирован от наибольшего к наименьшему (в данном случае это всегда так), замените uniq
на sort -rnu
.
Номера истории в FAILED_COMMANDS
должны быть уникальными и отсортированными от наибольшего к наименьшему, потому что при удалении записи номера следующих команд сдвигаются, т. Е. когда вы вводите history -d 2
, 3-я запись становится 2-й, 4-я становится 3-й и т. д.
Из-за этого при использовании этого кода нельзя вручную вызвать history -d
, где n
меньше или равно наибольшему числу, хранящемуся в FAILED_COMMANDS
и ожидайте, что код будет работать правильно.
Вероятно, неплохо было бы подключить exit_handler
к EXIT
, но вы также можете вызвать его в любое время раньше.