टोनिन ने मेरे डिफ़ॉल्ट प्रॉम्प्ट में एक बग बताया । न्यूनतम उदाहरण:
PS1 सेट करें:
PS1='$(exit_code=$?; [[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " ")$ 'इस बिंदु पर, संकेत इस तरह दिखता है:
$अब बाहर निकलने के लिए बाहर निकलें कोड उत्पादन ट्रिगर:
falseअब प्रॉम्प्ट में लाइन की शुरुआत में लाल रंग में निकास कोड होता है:
1 $- प्रेस Ctrl- r।
"गलत" टाइप करें। अब प्रॉम्प्ट में केवल खोज शामिल है:
(reverse-i-search)`false': false- प्रेस करें Enter।
परिणामी टर्मिनल इतिहास में अब निम्नलिखित शामिल हैं:
1 $ch)`false': false
अपेक्षित उत्पादन:
1 $ false
यही है, ऐसा लगता है कि इतिहास खोज आउटपुट को प्रॉम्प्ट और वास्तविक कमांड को छिपाने के साथ मिलाया गया है जिसे चलाया गया था।
मैंने इसका उपयोग करके इसकेPROMPT_COMMAND आसपास काम करने की कोशिश की :
set_exit_code() {
exit_code=$?
[[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " "
}
set_bash_prompt() {
PS1='$(set_exit_code)$ ' # Double quotes give the same result
}
PROMPT_COMMAND=set_bash_prompt
यह काम नहीं करता है - खोज और चलाने के बाद लाइन पहले जैसी ही दिखती है।
मैं इसे कैसे ठीक करूं?