Exécuter le script BASH dans Cygwin

0

Cygwin installé, écrit mon script, testé avec succès. Cependant, lorsque je l'exécute en tant que tâche planifiée Windows, il échoue. Des recherches plus approfondies montrent que tous les programmes ne sont pas disponibles lorsque le script est exécuté de cette manière. Par exemple, Lancer Mintty et taper ls affichera le contenu de mon répertoire. L'exécution de bash.exe à partir de la CLI de Windows me mettra dans une invite "BASH", mais ls n'est pas une commande reconnue.

J'ai essayé le standard

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

aussi bien que

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

J'ai ajouté une commande echo qui génère un fichier texte et qui fonctionne, donc je sais que le script est appelé. Le problème semble être lié au fait que les différents programmes ne sont pas disponibles ou qu'il n'aime pas les tuyaux que je fais.

C'est le script que j'essaye de lancer.

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

Des idées?

MODIFIER

  1. J'ai inséré le nom du fichier dans la tâche planifiée, raison pour laquelle l'exécution a échoué.
  2. Vous ne savez toujours pas pourquoi le script ne finirait pas. J'ai supprimé tous les utilisateurs sauf un de la liste et tout fonctionne comme prévu. Il faudra attendre ce soir pour vérifier si je peux ou non déconnecter les autres utilisateurs en un seul passage.
TurboAAA
la source
essayez d'utiliser les chemins complets des applications dans le script /usr/bin/awk, etc.
Nifle
Lors du débogage, essayez de décomposer le script ligne par ligne pour trouver le problème. Vous devriez pouvoir identifier le problème sur une seule ligne et partir de là.
mardi
Essayez d' échapper à la $
DavidPostill
Ce sont de bonnes mesures à prendre. Vous devrez vous rappeler que le chemin ne peut pas inclure awk, grep, sed, etc. et devez spécifier leurs emplacements.
TurboAAA

Réponses:

0

Ainsi, après quelques manipulations supplémentaires, j'ai découvert que l'ID de session était supprimé lorsque l'utilisateur était déconnecté. Au lieu d'insérer un onglet ou un élément similaire en tant que paramètre de remplacement, il insère simplement des espaces. Ainsi, lorsque AWK imprime, la colonne affiche les mauvaises informations. Vous trouverez ci-dessous le script final exécuté en tant que tâche planifiée dans 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
TurboAAA
la source