Execute o script BASH no Cygwin

0

Instalou o cygwin, escreveu meu script e foi testado com sucesso. No entanto, quando vou executá-lo como uma tarefa agendada do Windows, ele falha. Outra escavação está mostrando que nem todos os programas estão disponíveis ao executar o script dessa maneira. Por exemplo Iniciar o Mintty e digitar ls listará o conteúdo do meu diretório. Executar o bash.exe a partir do windows CLI me colocará em um prompt "BASH", mas ls não é um comando reconhecido.

Eu tentei o padrão

c:\cygwin\bin\bash.exe -l -c "/home/user/logoff.sh"

bem como o

c:\cygwin\bin\mintty.exe /bin/bash -l -c "/home/user/logoff.sh"

Eu adicionei um comando echo que é enviado para um arquivo de texto, e isso funciona para que eu saiba que o script está sendo chamado. A questão parece ser com os vários programas que não estão disponíveis, ou não gosta da tubulação que estou fazendo.

Este é o script que estou tentando executar.

for user in user1 user2 user3 ;
do
id=$(query user $user 2>> /dev/null | awk '{ print $3 }' | sed -e '/ID/ d')
if [[ "$id" =~ ^[1-9][0-9]?$ ]]; then
logoff $id
echo "$user was logged off" >> logg_off.log
fi
done

Alguma idéia?

EDITAR

  1. Eu deduzi o nome do arquivo na tarefa agendada, e é por isso que ele não funcionou.
  2. Ainda não tenho certeza do motivo pelo qual o script não conseguirá ser concluído. Eu removi todos, mas um usuário da lista e tudo funciona como esperado. Teremos que esperar até esta noite para testar se eu posso ou não fazer logoff dos outros usuários em uma única passagem.
por TurboAAA 08.03.2017 / 15:52

1 resposta

0

Então, depois de mais algumas tentativas, descobri que o ID da sessão é removido quando o usuário é desconectado. Em vez de inserir uma guia ou semelhante como um espaço reservado, ela simplesmente insere espaços. Então, quando o AWK imprime, a coluna imprime as informações erradas. Abaixo está o script final que é executado como um trabalho agendado no Windows Server.

for user in user1 user2 user3 ;
do
id=$(query user $user 2>> /dev/null | awk '{ print $3 }' | sed -e '/ID/ d')
if [[ "$id" =~ ^[1-9][0-9]?$ ]]; then
logoff $id
date >> /cygdrive/c/log_off.log
echo "$user was logged off" >> /cygdrive/c/log_off.log
else
id2=$(query user $user 2>> /dev/null | awk '{ print $2 }' | sed -e '/SESSIONNAME/ d')
if [[ "$id2" =~ ^[1-9][0-9]?$ ]]; then
logoff $id2
date >> /cygdrive/c/log_off.log
echo "$user was logged off" >> /cygdrive/c/log_off.log
fi
fi
done
    
por 16.03.2017 / 18:22