ZSH: Согласованная история между машинами

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

a = показать процессы для всех пользователей

u = отобразить пользователя / владельца процесса

x = также показать процессы, не подключенные к терминалу

https://unix.stackexchange.com/a/106848 / 149009

Вы также можете использовать ps x -u user , чтобы увидеть, какие процессы выполняет конкретный пользователь.

4
03.11.2018, 19:36
2 ответа

Это попытка ответить, как это сделать с помощью bashили zsh

.

В zshфункция precmdаналогична PROMPT_COMMANDв bashтем, что она выполняется перед каждым новым приглашением.

Пример использования bash:

$ function precmd() {
    echo ssh copy the files to another machine
}
$ export OLD_PROMPT=$PROMPT_COMMAND
$ unset PROMPT_COMMAND && export PROMPT_COMMAND="precmd; $PROMPT_COMMAND"
ssh copy the files to another machine
$ pwd
/home/jmunsch
ssh copy the files to another machine
$ export PROMPT_COMMAND=$OLD_PROMPT

Пример использования zsh:

% function precmd() {
    echo ssh copy the files to another machine
}
% pwd
/home/jmunsch
ssh copy the files to another machine
% unset -f precmd

Добавьте это в.zshrc:

function precmd() {
    # across terminals, sessions 
    setopt APPEND_HISTORY
    export machines="192.168.43.70 192.168.43.71 192.168.43.72"
    for m in $machines; do
        scp ~/.zsh_history $m:~/.zsh_history
    done
}

Для.bashrc:

function precmd() {
    # since bash generally saves history on session exit
    history -a # append session to history
    history -c # clear session
    history -r # read from history
    export machines="192.168.43.70 192.168.43.71 192.168.43.72"
    for m in $machines; do
        scp ~/.zsh_history $m:~/.zsh_history
    done
}
export PROMPT_COMMAND="precmd; $PROMPT_COMMAND"

Чтобы было проще это сделать

  • Настройте вход по ключу через ssh или вход без пароля.
  • Добавьте имена хостов/пользователей в .ssh/ssh_config.

связанные:

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

Возможно, вы сможете добавить несколько дополнительных шагов для объединения историй или сохранить порядок историй.

Использование git:

  • введите команду
  • зафиксировать изменения
  • отправить изменения в репозиторий
  • при каждой второй замене машины

Насколько я понимаю, это нетривиальная проблема. Скажем, например, вы входите на две машины с одной и той же историей, но затем одновременно вводите две разные команды; сохраняются ли обе команды, расходятся ли истории, перезаписывают ли они друг друга?

Для дальнейших исследований изучите распределенную согласованность/консенсус:

-1
27.01.2020, 21:02

Похоже, вы хотите BashHub:

Bashhub saves every terminal command entered across all sessions and systems and provides powerful querying across all commands.

Support for Bash and Zsh with a sweet cli for everything.

0
01.01.2021, 18:51

Теги

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