ঘড়ি শুধুমাত্র দৃশ্যমান আউটপুট নিরীক্ষণ করে?


12

না watchশুধুমাত্র একটি কমান্ডের প্রোফাইল আউটপুট নিরীক্ষণ? বলুন যে আমি নিম্নলিখিত ডিরেক্টরিগুলির সাথে একটি ডিরেক্টরিতে আছি:

$ ls
a  b  c  d  e  f  g  h  i  j  k  l  m  n

যদি আমি চালনা watch -g ls -1করি তবে আমি কোনও ফাইল যুক্ত বা অপসারণ করা হলে এটি থেকে প্রস্থান হওয়ার প্রত্যাশা করব। আসলে যা ঘটে তা হ'ল এটি কেবল তখনই প্রস্থান করে যখন প্রশ্নে থাকা ফাইলটির টার্মিনাল আউটপুটে দৃশ্যমান watch:

$ watch -g ls -1
Every 2.0s: ls -1                   Wed Nov 13 16:35:03 2013

a
b
c
d
e
f

ফাইলটি মোছা হচ্ছে m, যা আমার টার্মিনালের আকারের কারণে দৃশ্যমান নয়, কিছুই করে না। একটি দৃশ্যমান ফাইল মুছে ফেলা, বলুন d, watchপ্রত্যাশা অনুযায়ী প্রস্থান করার কারণ ঘটায় ।

-gপতাকা আমার মধ্যে thusly ব্যাখ্যা করা হয় manপৃষ্ঠা:

   -g, --chgexit
          Exit when the output of command changes.

কি হচ্ছে? এটা কি স্বাভাবিক? watchদীর্ঘ আউটপুট সহ আমি কীভাবে কমান্ড ব্যবহার করতে পারি ? আমি ব্যবহার করছি watch from procps-ng 3.3.4যা দেবিয়ান রেপোস থেকে ইনস্টল করা হয়েছিল।


-gবিকল্পটি কী করতে watchহবে? আমি এটি আমার সংস্করণে খুঁজে পাই নাwatch
iruvar

@ 1_CR আপডেট হওয়া প্রশ্নটি দেখে, আউটপুট পরিবর্তিত হলে এটি প্রস্থান করতে হবে should পরিবর্তন যখন স্ক্রিনে দৃশ্যমান হয় তখন এটি বিজ্ঞাপন হিসাবে কাজ করে।
টেরডন

উত্তর:


10

আমি এই থ্রেড শিরোনাম পেয়েছি: বাগ # 225549: ওয়াচ মনিটর স্টাডার আছে । এই থ্রেডটি ২০০৮ সালের, তবে মনে হচ্ছে পুরানো সংস্করণগুলি STDOUT ব্যতীত অন্য কোনও কিছু দেখার পক্ষে সমর্থন করে না।

সুতরাং আমরা কেবল STDOUT এ সীমাবদ্ধ দৃশ্যমান হিসাবে এখানে অনেক ভাষা আছে info watchএবং man watchএটি আমাকে আপনার পর্যবেক্ষণ / অনুমানটি সঠিক বলে মনে করে।

উদ্ধৃতাংশ

   watch runs command repeatedly, displaying its output (the first screen‐
   full).   This  allows you to watch the program output change over time.
   By default, the program is run every 2 seconds; use -n or --interval to
   specify a different interval.

এছাড়াও এই বিটটি বিজিজিএসের আওতায়:

BUGS
       Upon  terminal resize, the screen will not be correctly repainted until
       the next scheduled update.  All --differences highlighting is  lost  on
       that update as well.

যদি আমার অনুমান করতে হয় তবে আমি ভাবতে পারি যে তারা রানগুলির মধ্যে একটি বাফারে দৃশ্যমান বিটগুলি সংরক্ষণ করছে এবং তারপরে কেবল সেই চরিত্রগুলি বিশ্লেষণ করছে।

সম্পাদনা # 1

আমি এটি ব্যবহার করে আরও ডিবাগ করেছি straceএবং আপনি কমান্ড watchথেকে আউটপুটটি পড়তে দেখতে পারেন lsযাতে এটি অভ্যন্তরীণভাবে পরিবর্তনটি বাদ দেয়।

আমি mফাইল মুছে ফেলার আগে

$ strace -o w.log watch -g 'ls -1'
read(3, "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\nw.lo"..., 4096) = 34
close(3)                                = 0
--- SIGCHLD (Child exited) @ 0 (0) ---
munmap(0x7f4da83af000, 4096)            = 0
wait4(31011, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 31011
rt_sigaction(SIGTSTP, {SIG_IGN, [], SA_RESTORER|SA_RESTART, 0x7f4da79b94a0}, {0x7f4da7f81ee0, [], SA_RESTORER|SA_RESTART, 0x7f4da79b94a0}, 8) = 0
write(1, "\33[H\33[2JEvery 2.0s: ls -1\33[1;140H"..., 119) = 119
rt_sigaction(SIGTSTP, {0x7f4da7f81ee0, [], SA_RESTORER|SA_RESTART, 0x7f4da79b94a0}, NULL, 8) = 0
nanosleep({2, 0}, NULL)                 = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3519, ...}) = 0
pipe([3, 4])                            = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f4da839f9d0) = 31014
close(4)                                = 0
fcntl(3, F_GETFL)                       = 0 (flags O_RDONLY)
fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4da83af000
lseek(3, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
read(3, "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nm\nn\nw.lo"..., 4096) = 34
close(3)                                = 0
munmap(0x7f4da83af000, 4096)            = 0
--- SIGCHLD (Child exited) @ 0 (0) ---

mফাইল মোছার পরে

--- SIGCHLD (Child exited) @ 0 (0) ---
rt_sigaction(SIGTSTP, {SIG_IGN, [], SA_RESTORER|SA_RESTART, 0x7f4da79b94a0}, {0x7f4da7f81ee0, [], SA_RESTORER|SA_RESTART, 0x7f4da79b94a0}, 8) = 0
poll([{fd=0, events=POLLIN}], 1, 0)     = 0 (Timeout)
poll([{fd=0, events=POLLIN}], 1, 0)     = 0 (Timeout)
write(1, "\33[1;158H8\33[11;163H", 18)  = 18
rt_sigaction(SIGTSTP, {0x7f4da7f81ee0, [], SA_RESTORER|SA_RESTART, 0x7f4da79b94a0}, NULL, 8) = 0
nanosleep({2, 0}, NULL)                 = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3519, ...}) = 0
pipe([3, 4])                            = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f4da839f9d0) = 31028
close(4)                                = 0
fcntl(3, F_GETFL)                       = 0 (flags O_RDONLY)
fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4da83af000
lseek(3, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
read(3, "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk\nl\nn\nw.log\n", 4096) = 32
close(3)                                = 0
--- SIGCHLD (Child exited) @ 0 (0) ---
munmap(0x7f4da83af000, 4096)            = 0
wait4(31028, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 31028

হ্যাঁ, এটি কেবল অদ্ভুত বলে মনে হচ্ছে, এটি এমন কিছু চালানো অসম্ভব করে তোলে watch -g foo; echo "Something changed!"। এটি একটি প্রতিষ্ঠিত প্রোগ্রামে একটি আশ্চর্যজনক পঙ্গু বাগ মনে হচ্ছে।
টেরডন

@ ইটারডন - আমার প্রাচীন ফেডোরার সংস্করণটির -gসুইচটি ছিল না তবে আমি এটি উবুন্টুতে চেষ্টা করেছিলাম এবং এটি একই রকম আচরণ করে।
slm

ঠিক আছে, তখন সত্যিই অদ্ভুত। সুতরাং এটি প্রকৃতপক্ষে নিরীক্ষণ করে এবং পরিবর্তনটি দেখে, এটি এটির প্রতিক্রিয়া দেখায় না! অবশ্যই একটি বাগ।
টেরডন

2

আমি কোনও ফাইল যুক্ত বা অপসারণ করা হলে এটি থেকে প্রস্থান হওয়ার প্রত্যাশা করছি

আমি নিশ্চিত যে আপনি ইনোটিফাই-টুলস পরে আছেন ।

প্রোপস-এনজি থেকে দেখার জন্য আমার ম্যানপেজটি বলে

ঘড়িটি বার বার সঞ্চালন করে, এর আউটপুট এবং ত্রুটিগুলি প্রদর্শন করে (প্রথম স্ক্রিনফুল)


এটি সে সম্পর্কেই জিজ্ঞাসা করছে না, এসটিডিওউটের মাধ্যমে প্রদর্শিত হচ্ছে এমন একটি আপডেটের আচরণটি বোঝার চেষ্টা করছে, তবে টার্মিনালে দৃশ্যমান নয় খ / সি সে পুনরায় আকার দিয়েছে যাতে পরিবর্তিত আউটপুটটি "বন্ধ" হয় স্ক্রীণ "। আজকের সাথে আমি যার সাথে এটি নিয়ে আলোচনা করেছি তাদের বেশিরভাগেরই আশা watchছিল যে ওপি হিসাবে আচরণ করবে এবং পরিবর্তনের সাথে প্রস্থান করবে।
slm

হ্যাঁ আমরা এটি ইতিমধ্যে আলোচনা করেছি, আমি আমার উত্তরে একই পাঠ্যটি হাইলাইট করেছি। আমি টেরডন মোটামুটিভাবে জানি এবং এই মুহুর্তে তিনি এর কারণ জানতে চান।
slm

আমি সম্মত হলাম এটি তার প্রশ্নের উত্তর নয়, তবে এটিই তার সমস্যার সমাধান।
jthill

আপনি inotify ব্যবহার মানে? তিনি এরপরে watchযাচ্ছেন তা নয়, তিনি কেন এইভাবে আচরণ করেন তা জানতে চান । তিনি inotify সম্পর্কে জানেন।
slm

এটাই তাঁর প্রশ্ন। তিনি এর সাথে যা করার চেষ্টা করছেন তা আমি উদ্ধৃত করেছি: কোনও ফাইল যুক্ত হওয়ার বা অপসারণের জন্য অপেক্ষা করুন। দেখুন এই কাজের জন্য সরঞ্জাম নয়।
jthill
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.