uso do se no script

1. uso do se no script

Morpheus
Minions

(usa Nenhuma)

Enviado em 07/05/2024 - 16:27h

clear

read -p "Abrir o arquivo de receita agora? (s/n): " resposta

if [[ "$resposta" == "s" ]] ; then

gedit /tmp/receitas.txt 2> /dev/null

fi

echo "
Só mostra isso depois que o arquivo /tmp/receitas.txt for fechado pelo usuário...
"
exit 0


Esta mostrando o aviso mesmo com o arquivo aberto.



  


2. Re: uso do se no script

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 07/05/2024 - 16:27h

Para executar o script, você pode utilizar o comando bash seguido do nome do arquivo do script. Por exemplo, se o script estiver salvo com o nome script.sh, você pode executá-lo com o seguinte comando:

bash script.sh

Lembrando que o script verifica se o usuário deseja abrir o arquivo de receita e, caso a resposta seja "s", o arquivo /tmp/receitas.txt será aberto no editor de texto Gedit. Em seguida, uma mensagem será exibida após o fechamento do arquivo.


3. Re: uso do se no script

aguamole
aguamole

(usa KUbuntu)

Enviado em 08/05/2024 - 12:29h

Aqui @minions aqui esta funcionando, adapte ao seu caso:
#!/bin/bash

set -x

read -p "Abrir o arquivo de receita agora? (s/n): " resposta

if [[ "$resposta" == "s" ]]; then
kate ./minions.sh 2> /dev/null &
kate_pid=$!
while [[ "$(ps -p $kate_pid | wc -l)" != "1" ]]
do
sleep 1
done
fi

echo "
Só mostra isso depois que o arquivo /tmp/receitas.txt for fechado pelo usuário...
"
exit 0



4. Re: uso do se no script

Morpheus
Minions

(usa Nenhuma)

Enviado em 08/05/2024 - 15:31h


aguamole escreveu:

Aqui @minions aqui esta funcionando, adapte ao seu caso:
#!/bin/bash

set -x

read -p "Abrir o arquivo de receita agora? (s/n): " resposta

if [[ "$resposta" == "s" ]]; then
kate ./minions.sh 2> /dev/null &
kate_pid=$!
while [[ "$(ps -p $kate_pid | wc -l)" != "1" ]]
do
sleep 1
done
fi

echo "
Só mostra isso depois que o arquivo /tmp/receitas.txt for fechado pelo usuário...
"
exit 0


Essa verificação de processo do editor de texto será que pode entrar em loop infinito?

while [[ "$(ps -p $kate_pid | wc -l)" != "1" ]]
do
sleep 1
done

---------------------------------------------------------
Camarão que dorme, acaba na empada!


5. Re: uso do se no script

aguamole
aguamole

(usa KUbuntu)

Enviado em 08/05/2024 - 17:16h

Sim, vai entrar em um loop infinito cujo só vai ser encerrado se a condição do while for satisfeita(o comando passado deve ser igual a 1), essa condição é se o processo do kate esta ou não aberto, se o processo do kate encerrar a condição será satisfeita(dará igual a 1) e o while encerra a sua execução infinita.

O correto seria usar o comando wait no lugar desse while, mas o wait não funciono no kate então não deve funcionar no seu gedit também, mas se quiser tentar com o comando wait. O que acontece é que o kate por alguma razão passa para o shell que ele foi concluído mesmo ele estando aberto, é a programação da galera dos editores.


6. Re: uso do se no script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 08/05/2024 - 19:23h

Minions escreveu:

clear

read -p "Abrir o arquivo de receita agora? (s/n): " resposta

if [[ "$resposta" == "s" ]] ; then

gedit /tmp/receitas.txt 2> /dev/null

fi

echo "
Só mostra isso depois que o arquivo /tmp/receitas.txt for fechado pelo usuário...
"
exit 0
Esta mostrando o aviso mesmo com o arquivo aberto.

Minions, use o 'wait',
bem mais pratico....


#!/usr/bin/env bash

arq='receitas.txt';
read -p "Abrir ${arq} [sn]: " -n1 resp
[ ${resp,} = "s" ] && kwrite ${arq} & pid=$!
wait $pid

echo -e "\nfechou ${arq}"




Att.: Marcelo Oliver


7. Re: uso do se no script

aguamole
aguamole

(usa KUbuntu)

Enviado em 08/05/2024 - 21:11h

O wait do msoliver funciono, pelo visto o wait só funciona se o programa for executado em um subshell, é assim que chama né msoliver? é subshell?


8. Re: uso do se no script

Morpheus
Minions

(usa Nenhuma)

Enviado em 08/05/2024 - 22:48h


msoliver escreveu:

Minions, use o 'wait',
bem mais pratico....


#!/usr/bin/env bash

arq='receitas.txt';
read -p "Abrir ${arq} [sn]: " -n1 resp
[ ${resp,} = "s" ] && kwrite ${arq} & pid=$!
wait $pid

echo -e "\nfechou ${arq}"




Att.: Marcelo Oliver



Se tiver varios processo ativo do editor de texto não funciona. Vai cai no echo -e "\nfechou ${arq}"

Ex: Na foto tem 2 gedit abertos, ai cai no "fechou ${arq}" mesmo sem vc fecha o arquivo ${arq} .

Não tem como matar só o arquivo sem matar o editor de texto?







9. Re: uso do se no script

aguamole
aguamole

(usa KUbuntu)

Enviado em 08/05/2024 - 23:45h

Rapais, talvez vc tenha que escrever e chamar um programa externo usando uma linguagem de propósito geral, sei se tem como isso somente com utilitários do sistema não. Pode ser que tenha que chamar um programa externo para fazer essa verificação, já procuro programa externo para isso no github? programas externos, como se fosse um outro programa qualquer como o cat, less, mkdir, e tals, só que um para verificar o estado de editores de texto.


10. Re: uso do se no script

aguamole
aguamole

(usa KUbuntu)

Enviado em 08/05/2024 - 23:55h

Eu estive pensando, porque vc não usa o nano no lugar do gedit, o nano não vai dar esse problema.


11. Re: uso do se no script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/05/2024 - 19:18h

Minions escreveu:


[quote]msoliver escreveu:

Minions, use o 'wait',
bem mais pratico....


#!/usr/bin/env bash

arq='receitas.txt';
read -p "Abrir ${arq} [sn]: " -n1 resp
[ ${resp,} = "s" ] && kwrite ${arq} & pid=$!
wait $pid

echo -e "\nfechou ${arq}"

Se tiver varios processo ativo do editor de texto não funciona. Vai cai no echo -e "\nfechou ${arq}"
Ex: Na foto tem 2 gedit abertos, ai cai no "fechou ${arq}" mesmo sem vc fecha o arquivo ${arq} .
Não tem como matar só o arquivo sem matar o editor de texto?


Boa noite Minions e quem mais acompanha este tópico.
Testei aqui, (Debian 15.5).
Com vários processos em execução (kwrite),
Só exibe a mensagem quando o processo que foi iniciado pelo script/linha de comando, é encerrado.
Visto que o '$pid' é passado como parâmetro para o 'wait';
Em suma, o "wait" aguarda o encerramento do processo especificado no parâmetro.
Foram abertos, um a um, clicando, abrir com, kwrite:
pgrep -a 'kwrite'
14809 kwrite [tdeinit] /home/adminq/testes_01.txt
14812 kwrite [tdeinit] /home/adminq/testes_02.txt
14816 kwrite [tdeinit] /home/adminq/testes_03.txt
14819 kwrite [tdeinit] /home/adminq/testes_04.txt
14823 kwrite [tdeinit] /home/adminq/testes_05.txt
--------------------------------------------------------------
executado na linha de comando:
kwrite testes_00.txt & pid=$!;echo -e "pid:$pid\n";jobs -l;wait $pid
SAÍDA:
[1] 14827
$pid:14827
[1]+ 14827 Executando kwrite testes_00.txt &
-----------------------------------------------------------------------
executando novamente o comando:(outro terminal)
pgrep -a 'kwrite'
É incluída a linha:
14827 kwrite testes_00.txt
----------------------------------------------------------------------
Só mostrou a linha abaixo qdo fechei testes_00.txt
[1]+ Concluído kwrite testes_00.txt
----------------------------------------------------------------------
----------------------------------------------------------------------
É isso.
Att.: Marcelo Oliver







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts