كتابة دالة Zsh تقوم بإعادة تشغيل أمر حفظ الملف تلقائيًا

StackOverflow https://stackoverflow.com//questions/10657779

سؤال

أريد أن أكتب وظيفة 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top