কমান্ডের আউটপুট বাশনে কী পরিমাণ রেখা সীমাবদ্ধ থাকে?


11

আমি ব্যাকগ্রাউন্ডে একটি বড় ফাইল ডাউনলোড শুরু করেছি

$ nohup wget http://example.tld/big.iso &

যা আমাকে একটি nohup.outফাইল দেয় যা এর আউটপুট অন্তর্ভুক্ত করে wget

এখন, আমি যদি পরে ডাউনলোড করার প্রক্রিয়াটি দেখতে চাই তবে আমি ব্যবহার করতে পারি $ tail -f nohup.outতবে এটি আমার টার্মিনাল উইন্ডোটি আমার ইচ্ছার চেয়ে দ্রুত পূরণ করে। আমি যা দেখতে চাই তা হল সর্বশেষ লাইনটি নিয়মিত আপডেট করা হয় (ঠিক যেমন wgetএকা ব্যবহার করার সময় )।

আমি চেষ্টা করেছি $ tail -n 1 -f nohup.outতবে মনে হচ্ছে এটি কেবল প্রাথমিক লেজুড়কেই প্রভাবিত করে।

সাধারণভাবে বলতে গেলে, যদি কমান্ডের আউটপুট উপলব্ধ / দৃশ্যমান থাকে তবে (এই ক্ষেত্রে 1 তে 1) সীমাবদ্ধ করা সম্ভব হলে এটি এই সমস্যার সমাধান করবে। একটি সার্কুলার বাফারে আউটপুট রাখার বাছাই করুন - কেবলমাত্র সাধারণ অগ্রগতি বারটি $ wget example.tld/big.isoমুদ্রণ করবে তা ভাবেন ।

এরকম কোনও সমাধান আছে কি?

নাকি আমি ভুল পথে গাছে উঠছি? (অর্থ, nohupএর আউটপুট সীমাবদ্ধ করা বা অন্য কিছু করা কি সহজ হবে?)

উত্তর:


10

আপনি যদি স্ক্রোলিং অঞ্চলটি সীমাবদ্ধ করতে না চান (আমার অন্য উত্তরটি দেখুন), আপনি পরবর্তী লাইনটি প্রিন্ট করার আগে লাইনের শুরুতে ফিরে যেতে গাড়িবহর রিটার্নটিও ব্যবহার করতে পারেন। একটি পলায়ন ক্রম রয়েছে যা বাকী রেখাটি সাফ করে, যা বর্তমান লাইনটি আগের লাইনের চেয়ে কম হলে প্রয়োজনীয় হয়।

nohup wget http://cdimage.debian.org/debian-cd/6.0.3/amd64/iso-dvd/debian-6.0.3-amd64-DVD-1.iso &
el="$(tput el)"; # Clear to the end of the line
tail -n 1 -f nohup.out | while read -r line; do echo -n $'\r'"$el$line"; done;

6

আপনি watchএখানে ব্যবহার করতে পারেন :

watch -n 0.5 -e "tail -n 1 nohup.out"

সম্পাদনা করুন : -e(ওরফে --exec) বিকল্পটি এখানে উপযুক্ত দেখাচ্ছে। বিশেষত যদি আপনি watchখুব ছোট ব্যবধানে দৌড়ানোর লক্ষ্য রাখেন তবে এটি প্রতিটি চক্রের sh -cঅভ্যন্তরীণভাবে চলার ফলে ওভারহেড হ্রাস করে watch


2
মনে রাখবেন যে এটি tailপ্রতি সেকেন্ডে একটি নতুন প্রক্রিয়া তৈরি করে, যা আপনার যত্ন নেওয়া বা নাও হতে পারে। এছাড়াও, watch -n 0.1"ক্রমাগত আপডেট করা" অংশ অনুকরণের জন্য একটি উপ-দ্বিতীয় ব্যবধান (যেমন ) নির্দিষ্ট করা নিশ্চিত করুন । (এটি স্পষ্টতই প্রক্রিয়াগুলির সংখ্যা এবং ফাইল ওপেন watchকলগুলিও বৃদ্ধি করে।
janmoesen

এটি একটি সামান্য workaroundish, কিন্তু যেমন দুর্দান্ত। আমি পূর্ণ-স্ক্রিনবিহীন উত্তরের প্রত্যাশা করছিলাম, যাতে আমি পূর্ববর্তী ফলাফলগুলি দেখতে পারি - তবে সত্যই আমি watchএকটি নতুন টার্মিনাল উইন্ডোতে ব্যবহার করতে পারি। আমি আরও জানতে পেরেছি যে কমপক্ষে 1 সেকেন্ডের ব্যবধানের সাথে ব্যবহার tail -n 2করা তার চেয়ে বেশি কার্যকর because কারণ অন্যথায় সর্বশেষতম শতাংশ দেখা নাও যেতে পারে; এটি আপনার উত্তরের কোনও ত্রুটি নয়, তবে অন্য কেউ যদি উইজেটগুলি টোপ নোহপ আউটপুট দেখার সিদ্ধান্ত নেন তবে আমি তা উল্লেখ করেছি। -n 1wgetwatch
জারি কেইনেনেন

@janmoesen এই নির্দিষ্ট দৃশ্যের জন্য, একটি নতুন tailপ্রক্রিয়া সম্ভবত খুব বেশি ওভারকিল নয়; তবে সাধারণ উত্তর হিসাবে এটি বিবেচনায় নেওয়া ভাল। আমি এটিও লক্ষ করেছি যে watch -n 0.1এটি কাজ করে না, তবে watch -n 0,1কাজ করেছে - সেখানে লোকেল প্রয়োগ করা হতে পারে, যদিও আমি আগে টার্মিনাল কমান্ড বিকল্পগুলিতে প্রয়োগ করা লোকালগুলি দেখিনি। পার্শ্ব নোট হিসাবে: brew install watchদুর্দান্ত কাজও করেছেন :-)
জারি কেইনেনেন

একটি পার্শ্ব নোট: আপনার লোকেল সেটিংসের watchসাথে এটি কাজ করে 0,1বা 0.1নির্ভর করবে (এটি আপনার লোকেলের জন্য নির্ধারিত দশমিক প্রতীক ব্যবহার করে)। চেক LC_ALL=C watch -n 0.1 "date +%S.%N"
rozcietrzewiacz

3

আপনার টার্মিনালের স্ক্রলযুক্ত রেখাগুলি সীমাবদ্ধ করতে আপনি কয়েকটি Xterm নিয়ন্ত্রণ ক্রম ব্যবহার করতে পারেন। "স্ক্রোলিং অঞ্চল সেট করুন" সন্ধান করুন। যদিও এটি কিছুটা কুলডেজ। পরে আপনার টার্মিনালটি পুনরায় সেট করতে ভুলবেন না:

nohup wget http://cdimage.debian.org/debian-cd/6.0.3/amd64/iso-dvd/debian-6.0.3-amd64-DVD-1.iso &
clear; echo -n $'\e[1;2r'; tail -f nohup.out | grep --line-buffered .
# The "grep" line is to ensure a single line; you can also use "awk 1" or "sed" etc.

<অ-বহনযোগ্যতার বিষয়ে সাধারণ নোটটি এখানে সন্নিবেশ করান>
জানমোসেন

এটি অন্য একটি দুর্দান্ত বিকল্প, তবে এটি একটি সর্বোত্তমভাবে ডেডিকেটেড উইন্ডোতে ব্যবহৃত হয় tail -fকারণ এখনও বাফার পূরণ করে এবং টার্মিনালটি পরে যাইহোক পুনরায় সেট করা দরকার। এটি যতটা আশা করি তেমন ইনলাইন নয় , তবে অন্যথায় এটি যা আমি চেয়েছিলাম তা হতে পারে।
জারি কেইনেনেন

0

আপনি যদি না চান যে আউটপুটটি পুরো বর্তমান টার্মিনাল উইন্ডোটি দখল করে, আপনি একটি সাধারণ whileলুপ ব্যবহার করতে পারেন :

while true; do 
  XXX=$( tail -n1 my.log )
  echo -en " \r$XXX\r"
  sleep 0.5
done; echo

1
লক্ষ্য করুন যে কোনও আউটপুট-উত্পাদক কমান্ড চলাকালীন টার্মিনাল আউটপুট স্ক্রোল করতে সক্ষম হতে আপনার টার্মিনাল এমুলেটর সেটিংস সম্পাদনা করতে হবে এবং scrollTtyOutput(অথবা অনুরূপ) বিকল্পটি অক্ষম করতে হবে ।
rozcietrzewiacz
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.