প্রতিটি কমান্ডের প্রস্থান করার স্থিতি প্রিন্ট করতে বাশকে কীভাবে কনফিগার করবেন?


12

প্রতিটি কমান্ড বাশ-এ চলে একটি প্রস্থান কোড সহ ফিরে আসে।

আমি যখনই বাশ প্রম্পটে কোনও কমান্ড টাইপ করি, আমি এটি প্রস্থান স্থিতি প্রদর্শন করতে চাই, যেমন, echo $?

উদাহরণস্বরূপ, যদি আমি echo "hello";ব্যাশ প্রম্পটে চালাই তবে আউটপুটটি হওয়া উচিত:

linux@linux$ hello
linux@linux$ 0

আপনার প্রশ্নটি unix.stackexchange.com এ পোস্ট করার বিষয়ে কী ?

ধন্যবাদ @ ফ্র্যাঙ্ক তবে এই প্রশ্নটি রাখার পক্ষে কি এটি ভাল জায়গা নয়?
রবিডিক্সিত

আমি এটি পিএস 1 ভেরিয়েবলের একটি অংশ মুদ্রণের চেষ্টা করেছি, তবে এখনও বুঝতে পারি না এমন কারণে কাজ করে না।
রবিডিক্সিত

উত্তর:


13

শেষ সম্পাদিত কমান্ডের প্রস্থান কোডটি $?পরিবেশের ভেরিয়েবলে সংরক্ষণ করা হয় is সুতরাং আপনি কেবল এই পরিবর্তনশীলটিকে ডিফল্ট কমান্ড প্রম্পটে যুক্ত করতে পারেন এবং আপনার সর্বদা প্রস্থান কোড মুদ্রিত থাকবে। প্রম্পটটি $PS1এনভায়রনমেন্ট ভেরিয়েবলে সংরক্ষণ করা হয় । এটি প্রথমে /etc/bash.bashrcস্ক্রিপ্ট এবং পরে এর মধ্যে সেট করা আছে $HOME/.bashrc

সুতরাং এর ডিফল্ট মান থেকে লাইনটি $HOME/.bashrc( /etc/bash.bashrcসিস্টেমের প্রশস্ত হবে) সম্পাদনা করুন :

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

এটিতে (উদাহরণস্বরূপ):

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w[$?] \$ '

সুতরাং এতে ডিফল্ট প্রম্পট পরিবর্তিত হয়েছে:

user@host:/path/to/dir[0] $

বন্ধনীগুলির 0 টি হল আপনার প্রস্থান কোড, দেখুন:

user@host:~[0] $ ls
user@host:~[0] $ ls /root/
ls: cannot open directory /root/: Permission denied
user@host:~[2] $ ^C
user@host:~[130] $

অর্থের জন্য দেখুন http://www.tldp.org/LDP/abs/html/exitcodes.html


আমি এটি করার চেষ্টা করেছি কিন্তু হাতে থাকা ব্যাশের জন্য, এটি কাজ করছে না। আমি যে মেশিনে কাজ করছি তার জন্য এটি সর্বদা [0] দেখায়।
রবিডিক্সিত

আপনি কি নিশ্চিত যে আপনি বাশ চালান? আপনি কি আউটপুট কপি করতে পারেন readlink /proc/$$/exe? 0 মানে কোন ত্রুটি, আপনি কিছু যে একটি ত্রুটি দেয় চেষ্টা করেছি: ^Cবা falseবা asdasdasd?
বিশৃঙ্খলা

1
@ চাওসগুলিতে আমার PS1 হিসাবে আছে PS1=$(printf "%s\\\\u@\h:%s%s\w[$?]$%s " "$yellow" "$end" "$blue" "$end")তবে এটি 0সমস্ত সময় প্রদর্শিত হয়। কোন ধারণা কেন?
সর্বোচ্চ

1
এটি চমৎকার হবে, যদি প্রস্থান স্থিতিটি কেবলমাত্র প্রদর্শিত হয়, যদি এটি অসম 0
রুব 77

1
@ ম্যাক্স কারণ এটি আপনার সেট $?করার 0সময় আপনার ইতিমধ্যে প্রসারিত PS1। কর echo $PS1এবং আপনি দেখতে পাবেন। আপনাকে হয় একক উদ্ধৃতি ব্যবহার করতে হবে, বা এটির মতো পালাতে হবে \$?
উইসবুকি

7

আমি আর্ক উইকি থেকে অন্য একটি উপায় যা ব্যবহার করেছি তা হ'ল trap:

EC() { echo -e '\e[1;33m'code $?'\e[m\n'; }
trap EC ERR

প্রভাব:

$ ( exit 1 )
code 1

$ some-non-existent-command
some-non-existent-command: command not found
code 127

$

2
এটি ওপির প্রয়োজনীয়তাগুলি পুরোপুরি পূরণ করে না, যেহেতু তিনি শূন্য হলেও এমনকি প্রস্থান স্থিতি মুদ্রণ করতে চান - তবে আমি যা খুঁজছিলাম তা ঠিক এটিই ।
কিথ থম্পসন

2

এখানে একটি সহজ উদাহরণ:

PS1='$? > '

যদি ডাবল উদ্ধৃতি ব্যবহার করে থাকেন তবে আপনাকে এড়াতে একটি ব্যাকস্ল্যাশ যুক্ত করতে হবে $:

PS1="\$? > "

আউটপুট:

0 > echo 'ok'
ok
0 > bogus
bogus: command not found
127 > 

আরও ভাল উপায় হ'ল কেবলমাত্র প্রস্থান কোড প্রিন্ট করা যখন এটি শূন্য নয়।

PS1='${?#0}> '    # single quote example
PS1="\${?#0}> "   # double quote example (requires extra backslash)

নমুনা আউটপুট:

> echo 'ok'
ok
> bogus
bogus: command not found
127> 

ব্যাখ্যা: ${var#pattern}বাশ প্যারামিটার সম্প্রসারণ হ'ল মানে means var এর সামনের দিক থেকে সংক্ষিপ্ততম মিলের প্যাটার্নটি সরিয়ে দিন। সুতরাং এই ক্ষেত্রে, আমরা 0সামনে থেকে সরিয়ে $?দিচ্ছি, যা কার্যকরভাবে একটি প্রস্থান কোড কেটে যাবে 0

যদি ডাবল উদ্ধৃতি ব্যবহার করা হয় $?তবে PS1প্রতিবার মূল্যায়ন না করে সেট করা থাকলে প্রতিস্থাপন করা হবে । কি echo $PS1নিশ্চিত করতে একটি হার্ডকোডেড মূল্য নেই PS1


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