বাশ: শেষ কমান্ডের আউটপুট একটি নতুন লাইন দিয়ে শেষ হয় কিনা তা কীভাবে জানব?


10

বেশিরভাগ সময় কমান্ডের আউটপুট নিউলাইন চরিত্রের সাথে শেষ হয়। তবে কখনও কখনও এটি হয় না, সুতরাং পরবর্তী শেল প্রম্পট আউটপুট সহ একই লাইনে মুদ্রিত হবে।

উদাহরণ:

মূল @ হোস্টনাম [~] # প্রতিধ্বনি-হ্যালো
হেলোরুট @ হোস্টনাম [~] #

আমি সবসময় এটি খুব বিরক্তিকর খুঁজে পেয়েছি।
এখন, আমি পিএস 1 ভেরিয়েবলের শুরুতে একটি "\ n" যুক্ত করতে পারলাম, তবে বেশিরভাগ সময় আমার প্রয়োজন হয় না এমন একটি অতিরিক্ত লাইন প্রিন্ট করবে।

শেষ কমান্ডের আউটপুট একটি নতুন লাইন দিয়ে শেষ হয়েছে কিনা তা জানা সম্ভব?


সমাধান:
(ডেনিসকে ধন্যবাদ)

PS1='$(printf "%$((`tput cols`-1))s\r")\u@\h [\w]\$ '

এটি সুপারভাইজারে স্থানান্তরিত করা উচিত।
4aphink

আমি তোমার সংস্করণ পছন্দ করি! আপনি $()এক জায়গায় এবং অন্য জায়গায় ব্যাকটিক্স ব্যবহার করেছেন । আপনি $()উভয় ব্যবহার করতে পারেন ।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

আমি জানি. তবে আমার পক্ষে সেভাবে পড়া আরও সহজ
getFree

আমি ব্যবহার করব না tput colsকারণ এটি যেভাবেই হোক COLUMNS ভেরিয়েবলের মান আউটপুট করে এবং এটি ধীরে ধীরে কারণ এটি শেল বিল্টিন নয়। সন্নিবেশিত হোয়াইটস্পেসটি মুছে ফেলার জন্য \e[Kআপনি (সমতুল্য tput el) অন্তর্ভুক্ত করতে চাইবেন যাতে ডিফল্ট ক্ষেত্রে অনুলিপি করা ও আটকানোর সময় আপনি গুচ্ছস্থান সন্ধানের একগুচ্ছ পেতে না পারেন। অবশেষে, আপনাকে এই সমস্ত যাদুটির মধ্যে ঘিরে ফেলতে হবে \[এবং \]অন্যথায় বাশ আপনার কার্সারের অবস্থানটিকে দ্বিতীয়-অনুমান করার চেষ্টা করবে এবং আপনি যখন আপনার আদেশ / ইতিহাস সম্পাদনা করবেন তখন তা বিচলিত হবে।
dlitz

1
পুরো জিনিসটি ঠিক যেমনটি করা যায়:PS1='\[\e[7m%\e[m$( printf "%*s" "$((COLUMNS-1))" "" )\r\e[K\]\u@\h [\w]\$ '
dlitz

উত্তর:


6

আমি zshবাশ থেকে বৈশিষ্ট্যটি অনুকরণ করার জন্য নিম্নলিখিতগুলির সাথে পরীক্ষা করে যাচ্ছি :

$ unset PROMPT_SP; for ((i = 1; i <= $COLUMNS + 52; i++ )); do PROMPT_SP+=' '; done
$ PS1='\[\e[7m%\e[m\]${PROMPT_SP: -$COLUMNS+1}\015$ '

এটি একটি বিপরীত ভিডিও শতাংশ সাইন ইস্যু করে, এরপরে পরের লাইনে মোড়ক তৈরি করার জন্য একগুচ্ছ স্পেস করে তারপরে একটি ক্যারেজ রিটার্ন, তারপরে ডলারের চিহ্ন এবং একটি স্থান। আপনার প্রম্পটটি কাস্টমাইজ করতে আপনি "\ 015" এর পরে প্রম্পট পলায়নগুলি যুক্ত করতে পারেন।

এটি ব্যবহার করে কীভাবে আপনার টার্মিনাল ডান মার্জিন লাইন মোড়ানো (স্বয়ংক্রিয় মার্জিন) পরিচালনা করে hand PROMPT_SP দৈর্ঘ্য নির্বিচারে, তবে আপনার স্বাভাবিক টার্মিনালের প্রস্থ কমপক্ষে 80 বা হওয়া উচিত। Hard COLUMNS forলুপটি চালু হওয়ার সময়ের মধ্যে এখনও সেট না করা থাকলে আপনাকে সেই মানটির হার্ড-কোডের প্রয়োজন হতে পারে ~/.bashrcshopt -s checkwinsizeএটি ইতিমধ্যে সেট না থাকলে আপনি চাইবেন ।


আমি ভাবছি কেন প্রতিটি উত্তরকে কেউ নিম্নচাপে ফেলেছে ? হুঁ ... কোন ব্যাখ্যা নেই। কত সহায়ক।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

প্যাড স্ট্রিং তৈরি করার জন্য একটি লুপ ব্যবহার না করেই এখানে অন্য উপায়:printf -v PROMPT_SP '%*s' $((COLUMNS + 52)) ''
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া।

"বিপরীত ভিডিও শতাংশ সাইন" কী? "ভিডিও" শব্দটি আমাকে বিভ্রান্ত করেছে এবং আমি গুগলে উত্তরটি খুঁজে পেতে সক্ষম হইনি।
ডেভিডচাম্বার

1
@ ডেভিডচাম্বার্স: চরিত্রটির পটভূমি অগ্রভাগের রঙে প্রদর্শিত হয় এবং চরিত্রটি নিজেই পটভূমির রঙে প্রদর্শিত হয়। man 5 terminfoএই পরিভাষা ব্যবহার করে এমন কিছু ডকুমেন্টেশন দেখতে "বিপরীত ভিডিও" দেখুন এবং অনুসন্ধান করুন।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

0

না এটা সম্ভব নয়। বাশ নিজেই প্রক্রিয়া শুরু করে না বা এটি শুরু হওয়া প্রোগ্রামটির আউটপুট দেখে না।

এটি আমার কাছে কেবল ঘটেছে যে সেট করার জন্য কোনও প্রোগ্রাম লেখা সম্ভব হতে পারে PROMPT_COMMAND, যা কার্সারের বর্তমান অবস্থানটি পরীক্ষা করে এবং কার্সারটি বাম প্রান্তে না থাকলে একটি নতুন লাইন জারি করবে।


ভাল ধারণা. একমাত্র সমস্যা ... কার্সার অবস্থান জানা কি সম্ভব?
GetFree

0

zshআপনার সমস্যা সমাধানের চেষ্টা করে শেষ আউটপুট যদি কোনও নিউলাইন ছাড়াই শেষ হয় তবে আপনি পাবেন:

$ echo -n 'abc'
abc%
$ 

যেখানে %উল্টানো পটভূমি / সম্মুখভাগ ব্যবহার করে। এটি bashকোনও উপায়ে পোর্টেবল কিনা তা নিশ্চিত নন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.