Executa um script em uma nova janela de terminal

0

Eu estou olhando para executar um script que é separado do meu script pai em outra janela do terminal, mantendo a janela atual utilizável.

O raciocínio por trás disso é que desejo permitir que o usuário possa executar um script de observação que monitore as alterações de diretório à medida que elas são feitas.

esta é a minha função para isso

function watchFunction ()
{
  ./watch.sh &
}    

No entanto, isso só continua a ser executado na janela atual em segundo plano.

Não consigo usar ou instalar nenhum dos seguintes devido à minha distribuição do Linux: genone-terminal; xterm; tela ; konsole; terminal ou qualquer outra ferramenta instalável!

Qualquer conselho seria ótimo, já que estou começando com o script do bash!

    
por Daryl VaDazzle McAllister 26.10.2017 / 00:25

3 respostas

1

De acordo com seus comentários, você está usando o xfce4-terminal. De sua página de manual , você pode ver a seguinte opção

−x, −−execute
Execute the remainder of the command line inside the terminal

Assim, você pode simplesmente preceder isso em ./watch.sh , ou seja,

function watchFunction ()
{
  xfce4-terminal -x ./watch.sh &
}  
    
por 26.10.2017 / 03:33
0

Se você quiser apenas assistir a saída do script, é possível redirecionar a saída do seu script para um arquivo e assistir a esse arquivo em outra janela:

# Run the script and log all output to a file
./watch.sh &> /var/log/watch.log &

# Watch the file, possibly in another terminal window
tail -f /var/log/watch.log

Na minha experiência, esse comportamento (gravar em um arquivo de log) é bem típico. Não me lembro de ter usado um aplicativo de linha de comando que começou a gerar outras janelas de terminal.

Dito isso, se você realmente quiser abrir uma nova janela de terminal a partir da linha de comando, isso dependerá do aplicativo do terminal. Existe um bom post sobre isso no site AskUbuntu StackExchange:

Em particular, veja esta resposta . Por exemplo, para o terminal do Gnome, você pode usar um comando como o seguinte:

gnome-terminal -x sh -c "./watch.sh; bash"

Se você quiser determinar programaticamente qual aplicativo de terminal está sendo usado, você pode querer consultar a seguinte postagem do AskUbuntu:

A solução aceita lá define a seguinte função:

which_term(){
    term=$(perl -lpe 's/
# Run the script and log all output to a file
./watch.sh &> /var/log/watch.log &

# Watch the file, possibly in another terminal window
tail -f /var/log/watch.log
/ /g' \ /proc/$(xdotool getwindowpid $(xdotool getactivewindow))/cmdline) ## Enable extended globbing patterns shopt -s extglob case $term in ## If this terminal is a python or perl program, ## then the emulator's name is likely the second ## part of it */python*|*/perl* ) term=$(basename "$(readlink -f $(echo "$term" | cut -d ' ' -f 2))") version=$(dpkg -l "$term" | awk '/^ii/{print $3}') ;; ## The special case of gnome-terminal *gnome-terminal-server* ) term="gnome-terminal" ;; ## For other cases, just take the 1st ## field of $term * ) term=${term/% */} ;; esac version=$(dpkg -l "$term" | awk '/^ii/{print $3}') echo "$term $version" }
    
por 26.10.2017 / 03:03
0

Bem, eu fiz isso em um script que fiz. Você precisa iniciar uma janela de terminal antes de executar o comando.

xterm -e sh -c path/yo/your/script &;

No script que escrevi, uso algo assim:

terminal="xterm"

run () {
    cmd="$terminal -e sh -c $1"
    [ -n "$1" ] && (eval "$cmd") > /dev/null 2>&1 &
}

run $VISUAL example/file/name

Isso ativará um terminal que executará seu programa nele. Também impedirá que o primeiro terminal seja preenchido com mensagens stderr / stdout da nova janela.

Basta substituir a variável terminal pela que você usa / gostei.

Espero que ajude.

    
por 26.10.2017 / 06:13