Запустить скрипт BASH в Cygwin

установлен Cygwin, писал мой сценарий, успешно прошел испытания. Однако, когда я иду, чтобы запустить его в качестве запланированной задачи в системе Windows не удается. Дальнейшее изучение показывает, что не все программы доступны при выполнении сценария таким образом. Например
Запуск Mintty и ввод в ls будет перечислять содержимое моего каталога.
Бегущий Баш.exe из Windows CLI поместит меня в приглашение "BASH", но ls не является распознанной командой.

Я пробовал стандарт

c:cygwinbinbash.exe -l -c "/home/user/logoff.sh"

а также

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

я добавил команду echo, которая выводит в текстовый файл, и это работает, поэтому я знаю, скрипт вызывается. Проблема, по-видимому, либо с различными программами, которые недоступны, либо ей не нравится трубопровод, который я делаю.

скрипт, который я пытаюсь запустить.

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

какие идеи?

EDIT

  1. я жир пальцами имя файла в расписании задача, из-за которой не удалось выполнить.
  2. все еще не уверен, почему скрипт не будет завершен. Я удалил всех, кроме одного пользователя из списка, и все работает так, как ожидалось. Придется ждать до вечера, чтобы проверить, могу ли я выйти в один проход.
5
задан TurboAAA
источник

1 ответов

Так что после некоторого больше возиться я обнаружил, что идентификатор сеанса удаляется, когда пользователь отключен. Вместо того, чтобы вставлять вкладку или похожую на держатель места, он просто вставляет пробелы. Поэтому, когда AWK распечатывает столбец, печатается неправильная информация. Ниже приведен последний сценарий, который выполняется как запланированное задание в Windows Server.

for user in user1 user2 user3 ;
do
id=$(query user $user 2>> /dev/null | awk '{ print  }' | 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  }' | 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
0
отвечен TurboAAA 2017-03-16 17:22:21
источник

Другие вопросы bash command-line cygwin shell windows