Самоисполняемый, самомодифицирующийся скрипт? Это не очень хорошая идея.
Лучшим решением было бы создание демона-заглушки с минимальной функциональностью (т. е. отвечающего за установку новых версий подчиненного сценария и его вызов через определенные промежутки времени). Что-то вроде ... (не проверено)
while true; do
# check if a patch tar file exists and if yes then do patching
if [ -f "$PATCH" ]; then
( cd /usr/local/mydaemon \
&& tar -xzf "$PATCH" \
&& rm -f "$PATCH" ) \
|| exit -1
fi
$SCRIPT
sleep 10
done
Хорошо, я немного изучил, и решение, которое я искал, это
comm -23 <(sort File1) <(sort File2)
Используйте круглые скобки, чтобы сгруппировать две команды в одну:
( du -h --max-depth=1 /home 2>/dev/null | egrep -v '(!G|.cp)' | awk -F"/" '{print $NF}' ; ls -al /somedir/ | grep -v 'lock' ; ) | sort | uniq
Вывод двух команд в скобках объединяется и отображается как вывод одного единственного процесса (подоболочки ).
PS :Ваша первая команда выводит /home
среди каталогов...
Если вы хотите перечислить все строки/слова в одном файле, которых нет в другом:
grep -v -f {smallfile} {bigfile}
Вместо того, чтобы просматривать два сгенерированных файла, выполните итерацию по более длинному списку имен пользователей и протестируйте их в другом каталоге:
for userpath in /home/*/; do
user=$( basename "$userpath" )
if [ ! -e "/somedir/$user" ]; then
printf 'User %s is not suspended\n' "$user"
fi
done
Это будет перебирать все подкаталоги в /home
и проверять базовое имя каждого каталога (имя пользователя )против имен в /somedir
. Если в этом другом каталоге нет соответствующего имени, пользователь не приостанавливается.