bash ou vimscript, como terminar o script, mas deixar os aplicativos iniciados ainda em execução

0

Em bash ou vimscript, como posso executar um script que inicie um aplicativo (xv ou display) e que o script termine retornando o foco para vim, mas  deixando xv / display ainda em execução. Meu esforço atual é essa função vim, que é essencialmente uma versão dirigida por vim da minha tentativa no bash. Ele trava no último comando até eu sair da exibição.

" S() is called internally by :F to show images appropriately
function! S(j,k)
if system("pgrep ".a:j)!=''
exe '!pkill '.a:j
endif
exe '!'.a:j.' -geometry +0+'.a:k.@u.' &'
wmctrl -a Botany
endfunction

a: j é nome do aplicativo, a: k é o parâmetro de posição da tela, @u é caminho de arquivo

    
por user985675 16.03.2017 / 20:11

2 respostas

1

Um típico script bash seria parecido com

#!/bin/bash

# Configuration
CMD="xv -some -parameters /and/a/path"
STDOUTLOG="/path/to/logfile"
STDERRLOG="/dev/null"

/bin/bash -c "eval '$CMD'" >"$STDOUTLOG" 2>"$STDERRLOG" &
    
por 16.03.2017 / 20:42
0

O problema é que você não pode dissociar um aplicativo do processo que o iniciou, a solução que funciona para mim é ter algum outro processo, já em execução, fazer isso para mim. Aqui está a minha solução:

pkill -n xterm
cd /mnt/0/botany
xterm -g 80x59+885+0 -title 'Botany' -e vim -S bot.vim -o g y d "+res 8|2winc w|res 30" &
xp=
dp=
while ps ax|grep Botany|grep -v grep; do
  if [ -f q ]; then
    s=$(cat q)
    rm q
    if [[ "$s" =~ 'images.*' ]]; then
      kill $dp 2> /dev/null
      vd="$s $vd"
      xv -geometry +0+380 ${vd% *} &
      dp=$(pgrep xv|tail -1)
    else
      kill $xp 2> /dev/null
      vx="$s $vx"
      xv -geometry +0+0 ${vx% *} &
      xp=$(pgrep xv|tail -1)
    fi
    sleep 1
    wmctrl -a Botany
  fi
done
kill $dp $xp 2> /dev/null

Os primeiros três comandos, para o xterm, compõem o script original que eu usei para abrir este projeto, então este script continuou aberto e aguardando até o momento em que eu fechei o vim e deixei o xterm morrer, ponto no qual esse script de chamada feche também. Então aqui estava um processo de execução útil, sem fazer nada, e no diretório que eu estava trabalhando.   Eu adicionei o resto do código, que verifica a existência de um arquivo q, lê e imediatamente destrói e mata qualquer instância em execução do visualizador. em seguida, reinicia o visualizador usando o caminho de arquivo do arquivo q como a imagem a ser exibida. Tudo completamente dissociado do vim, onde meu vimscript apenas grava o caminho do arquivo para o arquivo q, e nunca faz referência ao aplicativo do visualizador, xp.

    
por 19.03.2017 / 18:17