كتابة دالة Zsh تقوم بإعادة تشغيل أمر حفظ الملف تلقائيًا
-
11-12-2019 - |
سؤال
أريد أن أكتب وظيفة Zsh التي تبدو كما يلي:
smartwatch [WATCH_FILE] [COMMAND_TO_RUN] [COMMAND_ARGS]
مثل ذلك بعد WATCH_FILE
يتم حفظ ذلك COMMAND_TO_RUN
سيتم تشغيل و smartwatch
سينتظر حتى يتم حفظ الملف مرة أخرى.سيكون هذا مفيدًا بالنسبة لي في هذا السيناريو:
smartwatch server.py python server.py
لذلك في كل مرة أقوم بتعديل ملف الخادم، يتم إعادة تشغيل الخادم.لقد سمعت أن أدوات inotify قد تكون قادرة على المساعدة، لذلك أنا باستخدام inotifywait
, لكن من يعرف أداة أفضل فليخبرني.إليك ما لدي حتى الآن:
smartwatch() {
WATCH=$1
CMD=$2
ARGS=$*[3,-1]
$CMD $ARGS &!
PID=$!
inotifywait -qq $WATCH
kill $PID
exec smartwatch $WATCH $CMD $ARGS
}
هذا الحل بطيء نوعًا ما وليس أنيقًا جدًا.هل يعرف أحد طريقة لجعل هذا أكثر كفاءة أو على الأقل أكثر نظافة؟
المحلول
وبعد بعض العبث، إليك ما انتهى بي الأمر:
onsave() {
while true
do
eval "$1 &!"
trap "kill $! &> /dev/null; return;" SIGINT SIGTERM
inotifywait -e modify -qq $2
kill $! &> /dev/null
done
}
لذلك يجب أن تكون قادرًا على الجري onsave "python server.py" server.py
لا تنتمي إلى StackOverflow