উত্তর:
হ্যাঁ, দুটি উপায় আছে। একটিতে সেট করা PROMPT_COMMANDহয় .bashrc, অন্যটি - কমান্ডের PS1জন্য কমান্ড প্রতিস্থাপন স্থাপন করতে echo $?হয়।
পদ্ধতি 1:
বাশ ম্যানুয়াল পৃষ্ঠা থেকে:
PROMPT_COMMAND
If set, the value is executed as a command prior to issuing each primary prompt.
আপনি এই ভেরিয়েবলটি যাই সেট করুন না কেন, প্রতিবার প্রম্পট আঁকার আগে চালানো হবে। ডেমো:
$> PROMPT_COMMAND=" echo 'Last command exited with' \$? 'code' "
Last command exited with 0 code
$> ls /etc/passwd > /dev/null
Last command exited with 0 code
$> ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
Last command exited with 2 code
$>
এর ব্যবহারটি নোট করুন \$?। স্থায়ী পরিবর্তনের জন্য, এটিকে সংরক্ষণ করুন.bashrc
পদ্ধতি 2
ধরুন আমার PS1প্রম্পটটি এভাবে সেট করা আছে:
PS1='
user@ubuntu:$> '
যদি প্রতিবার এই প্রম্পটটি স্ক্রিনে পুনর্নির্মাণ করা হয় তখন আমি কিছু প্রোগ্রাম চালাতে চাই (যা প্রতিটি পূর্ববর্তী কমান্ড চালানোর পরে), আমাকে command substitution $(. . .) প্রম্পটে এটি ব্যবহার এবং সেট করতে হবে:
PS1=' [ $? ]
user@ubuntu: $> '
ডেমো:
$> PS1=' [ $? ]
> $>_ '
[ 0 ]
$>_ ls /etc/passwd > /dev/null
[ 0 ]
$>_ ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
[ 2 ]
$>_
লক্ষ্য করুন যে আমি আমার PS1 কে দুটি লাইনে বিভক্ত করেছি, শীর্ষে [ exitcode ]এবং নীচে থাকবে $> <blank space>'। এজন্য দ্বিতীয় লাইনে >আগে রয়েছে $> '(নেতৃস্থানীয়টি মাল্টলাইন কমান্ডের জন্য অনুরোধ জানানো >হয় PS2)। বিকল্পভাবে, আপনি এর মতো কিছু করতে পারেন ( $'...'কাঠামোটি লক্ষ্য করুন ):
$> PS1=$'[ $? ] \n$> '
[ 0 ]
$>
PS1কেবলমাত্র পাঠ্য যা ব্যবহারকারীর ইনপুট পাওয়ার আগে মুদ্রিত হচ্ছে - এর চেয়ে বেশি কিছুই নয়। এটি প্যারামিটার সম্প্রসারণ এবং কমান্ড বিকল্পগুলি প্রতিরোধক নয়, সুতরাং আপনি কোনও কিছু দিতে পারেন $(...), উদাহরণস্বরূপ $( pwd )এবং এটি সেখানে প্রদর্শিত হবে। আমি ল্যাপটপের ব্যাটারি শক্তি দেখাতে একটি কাস্টম স্ক্রিপ্টের সাহায্যে এটি ব্যবহার করেছি, উদাহরণস্বরূপ
আর্ক উইকি থেকে আমি যে পদ্ধতিটি গ্রহণ করেছি তা হ'ল trap ERR। trapসিগন্যাল পাওয়ার সময় বাশগুলিতে কমান্ড চালানোর জন্য বা অন্য কিছু ইভেন্টের জন্য ব্যবহৃত হয়। ERRযখনই বর্তমান কমান্ড লাইনটি ত্রুটির সাথে সমাপ্ত হয় তখন একটি ফাঁদ রান করা হয় - ফেরতের মান 0 হয় না (যদি এটি সাধারণত শেষ হয়ে যায় তবে রিটার্নের মান অবশ্যই 0 হবে)
সুতরাং, উদাহরণস্বরূপ:
trap 'printf "\ncode %d\n\n" $?' ERR
তারপর:
$ echo foo
foo
$ false
code 1
$
(দ্রষ্টব্য: echoকমান্ডের পরে কোনও বার্তা যা সফলভাবে চলতে পারে না - যখন আমি একটি কমান্ড টাইপ করি এবং টার্মিনাল কিছুই না করে তখন এর অর্থ কী? )
আর্ক উইকি টিপটি এগিয়ে গিয়ে বার্তাটি রঙিন করে তুলেছে যাতে আপনি লক্ষণীয় হলুদ বার্তা পান:
EC() { echo -e '\e[1;33m'code $?'\e[m\n'; }
trap EC ERR
প্রভাব:
কার্যত, codeকমান্ড ব্যর্থ হয়েছে তা জানতে আউটপুটটিতে হলুদ রঙের জন্য আমাকে কেবল নজর রাখা দরকার ।