উত্তর:
হ্যাঁ, দুটি উপায় আছে। একটিতে সেট করা 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
কমান্ড ব্যর্থ হয়েছে তা জানতে আউটপুটটিতে হলুদ রঙের জন্য আমাকে কেবল নজর রাখা দরকার ।