Script Bash para iniciar o tmux e emitir comandos

2

Eu quero usar um script nautilus para abrir um terminal (gnome-) com uma sessão tmux (ou iniciar um) em um local específico e, em seguida, executar alguns comandos neste terminal (por exemplo, nvim $ file).

Eu encontrei 2 problemas no entanto: 1: Eu tenho "Executar um comando personalizado em vez do meu shell" em "tmux", de forma que cada terminal inicie em uma sessão do tmux. Isso parece negar a capacidade de abrir o terminal em um determinado local. O que tentei é colocar um arquivo executável test.sh em ~/.local/share/nautilus/scripts/ com conteúdo:

#!/bin/bash
gnome-terminal --working-directory=$NAUTILUS_SCRIPT_CURRENT_URI 

isso funciona em um perfil em branco. Com "tmux" como comando de inicialização, no entanto, é só pegar um terminal em branco em ~

2: Se eu tentar usar qualquer comando depois disso, nada acontece.

nvim some_file_there

não faz nada, assim como echo "hi" e exec echo 'hi'

Alguém poderia explicar o comportamento para mim?

Enquanto isso, desativei a configuração "Executar um comando personalizado" no terminal. No entanto, ainda só posso alterar o diretório de trabalho (terminal aberto aqui), mas não posso emitir nenhum outro comando.

Meu mais novo script de teste contendo apenas:

#!/bin/bash
zenity --info --text="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
gnome-terminal -e "ls"

De alguma forma, alterar o diretório de trabalho para aquele, que o script Nautilus é iniciado a partir! Também mostra os resultados do comando ls, mas no terminal uma faixa de diálogo é mostrada em azul dizendo: "O processo filho saiu normalmente com o status 0." E um botão de relançamento à direita. - Eu acho que isso significa que uma nova sessão ou terminal é iniciada (a criança), mas ela não continua, de modo que eu possa eventualmente usá-la!

Alguém pode, talvez, esclarecer o que acontece aqui?

    
por mike 22.12.2016 / 17:25

1 resposta

0

Eu encontrei uma solução que depende muito do tmux. Como o tmux está trabalhando independentemente do shell e prevalece mesmo depois de fechar as janelas, pode-se preparar uma sessão do tmux e depois anexá-la. A coisa não sairá instantaneamente, já que o comando de anexo não retorna a menos que você saia dele.

Isso e o fato de você poder nomear e pesquisar uma sessão produz o seguinte Nautilus-Script:

#!/bin/bash
# nautilus script to start files in nvim under a tmux session
# place this script into ~/.local/share/nautilus/scripts/nvimOpen.sh
# presented without warranty by mike aka curvi

# nvim running in another session? -
# TODO tmux rename-session -t $whaever nvim

# Tmux session 'nvim' is running neovim always!
if tmux has-session -t nvim ; then
  # test if it is open and split it
  for selected_file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ; do
    tmux send-keys -t nvim Escape # change to normal mode
    tmux send-keys -t nvim ";vsp $selected_file" Enter # open file in vsplit
  done
else
  # or start it up freshly!
  tmux new-session -d -s nvim ;
  tmux send-keys -t nvim "nvim -O $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" Enter
  tmux send-keys -t nvim Escape # change to normal mode
fi
# after the tmux session is prepared - attach to it in gnome-terminal!
gnome-terminal -e "tmux attach-session -d -t nvim"

Bônus: desde que eu mando as chaves, ao invés de emitir os comandos diretamente elas aparecem no histórico dos terminais, como esperado!

Atenção: meu nvim / init.vim contém um remapeamento de ; to : , o que significa que, para executar, é necessário verificar as chaves enviadas para as configurações "vim / neovim" regulares!

    
por 14.01.2017 / 22:23