Сообщить удаленной ssh сессии о tmux?

[1174347] Еще несколько вариантов в порядке возрастания:[12141]GNU [1174936]grep[1174937] с PCRE[12142]grep -oP 'uid=\K[^,]+' файл. [12143] [1174940]\K[1174941] отбрасывает все, что соответствовало этому моменту, что в сочетании с переключателем [1174942]-o[1174943] приведет к тому, что [1174944]grep[1174945] будет печатать только самый длинный отрезок не [1174946], [1174947] символов, который приходит после [1174948]uid=[1174949]. [12144]awk[12145]awk -F'[=,]' '{печать $2}' файла [12146]-F'[=,][1174955] устанавливает разделитель полей либо [1174956]=[1174957], либо [1174958],[1174959], поэтому 2-е поле - имя пользователя.[12147]sed[12148]sed -r 's/.{8}([^,]*).*/\1/' file [12149] Это будет соответствовать первым 7 символам ([1174964]. {7}[1174965]) [1174966]=[1174967], захватите самый длинный отрезок не[1174968],[1174969] как [1174970]\1[1174971] и замените всю строку на [1174972]\1[1174973].[12150]perl[12151]perl -pe 's/.+?=([^,]+).*/$1/' файл. [12152]-pe[1174978]-pe[1174979] означает "вывести каждую строку после применения скрипта, заданного -e". Оператор подстановки [1174980]s///[1174981] является оператором подстановки, а регулярное выражение ищет 1-ый ([1174982].+?[1174983], [1174984]?[1174985] делает его соответствующим самой короткой строке) [1174986] =[1174987], а затем захватывает самый длинный отрезок не[1174988], [1174989] символов после этого. [1174990]s///[1174991] заменяет то, что было согласовано с тем, что было захвачено (то, что было внутри скобок). [12153]cut[12154]cut -d'=' -f 2 файл | cut -d ',' -f 1 [12155] [1174996]-d[1174997] устанавливает разделитель на [1174998]=[1174999], поэтому 2-ое ([1175000]-f 2[1175001]) поле является [1175002]-имя пользователя,ou[1175003]. Второе поле [1175004] cut[1175005] использует [1175006], [1175007] в качестве разделителя и выводит только имя пользователя.[12156]
2
11.11.2013, 22:27
1 ответ

Это один из возможных способов сделать то, что вы ищете:

tmux устанавливает переменные среды в создаваемых им оболочках (например, $ TMUX, $ TMUX_PANE), их можно обнаружить и запустить команду ssh, чтобы сообщить вам удаленный сеанс, как клиент был запущен, мы рассматриваем в два этапа.

Во-первых, определение того, где запускается ssh, может быть выполнено с помощью функции, названной ssh ​​для данного примера.

function ssh {
    if [ -z "$TMUX" ]; then
        # echo connecting from a plain terminal
        /usr/bin/ssh $1 # $1 is <user@hostname>
    else
        # echo connecting through tmux
        /usr/bin/ssh -t $1 bash --rcfile '~/.bashrc.tmux'
    fi
}   

Примечание: функции имеют приоритет, если их имена совпадают с именами программ в вашем пути. Назовите функцию по-другому, если хотите избежать путаницы.

Во-вторых, чтобы позволить вашему удаленному хосту установить вашу подсказку соответствующим образом, создайте файл ~ / .bashrc.tmux на вашем удаленном хосте, например,

# contents of .bashrc.tmux, override PS1 to your liking
source .bashrc
PS1="[\d \t \u@\h:\w ] $ "

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

RUNNING_THRU_TMUX=true
source .bashrc
1
27.01.2020, 22:22

Теги

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