Passar variável para outro painel

1

Estou trabalhando com o tmux e gostaria de passar algumas informações de um painel para outro.

Por exemplo, no primeiro painel eu tenho a pasta pelo comando pwd e em vez de copypast para outro painel eu quero atribuir este resultado a alguma variável e usá-lo em outro. Eu acho que não posso usar variáveis bash porque elas estão vivendo na sessão bash ou no arquivo de configuração.

Alguma ideia para resolver isso?

    
por megas 19.04.2016 / 18:28

2 respostas

2

Arquivos temporários antigos simples:

$ pwd > /tmp/loc

$ cd "$(</tmp/loc)"

$ cd "'</tmp/loc'"

$(< file) é semelhante a $(cat file) ; você pode pular as aspas duplas se o conteúdo não tiver espaços.

Se você incluir isso em uma função ou algo do tipo, altere a /tmp/file para ~/tmp/file ou até mesmo $XDG_RUNTIME_DIR/file para alguma segurança:

put() { echo "${*:2}" > "$XDG_RUNTIME_DIR/var-$1"; }
get() { cat "$XDG_RUNTIME_DIR/var-$1"; }
forget() { rm -f "$XDG_RUNTIME_DIR/var-$1"; }

$ put somedir "$(pwd)"

$ cd "$(get somedir)"

Você pode obter mais e armazenar variáveis nos keyrings do kernel via keyctl (somente no Linux):

put() { keyctl add user "$1" "${*:2}" @u; }
get() { keyctl pipe "$(keyctl search @u user "$1")"; }
forget() { keyctl unlink "$(keyctl search @u user "$1")"; }

Sim, as variáveis bash vivem no próprio processo bash; se você for uma variável export , ela será copiada para o processo "ambiente" e copiada (herdada) pelas coisas que você executar a partir desse processo bash.

    
por 19.04.2016 / 18:40
1

Existe uma ferramenta leve, rápida e bastante prática que é usada em todo o lugar onde o armazenamento em cache ou intercâmbio de dados é necessário sem grandes esforços na codificação. Redis é o nome, e aqui poderia ser usado assim:

  1. você inicia o redis-server
  2. você chama redis-cli configurando qualquer chave para o valor requerido em uma sessão
  3. você chama o redis-cli obtendo o valor da chave necessária em outra sessão

Assim:

#> redis-server &

shell session1> var_from_session1="I was set in session1"
shell session1> redis-cli set var_from_session1 "$var_from_session1"
OK



shell session2> var_from_session1='redis-cli get var_from_session1'
echo $var_from_session1
I was set in session1

Se você sabe escrever traps no shell, você pode criar uma função que é chamada quando sua sessão de destino é direcionada ("kill") com um sinal de usuário. Essa função então definiria as variáveis encontradas como chaves em redis para os valores apropriados.

    
por 19.04.2016 / 19:34