मैंने @ गाइल्स के उत्तर का उपयोग करना शुरू कर दिया, लेकिन पाया कि यदि टर्मिनल ने कॉलम की संख्या बदल दी है तो प्रॉम्प्ट एक पंक्ति के शुरू में अपेक्षा के अनुरूप नहीं होगा। यह कई कारणों से हो सकता है, जिसमें tmux / screen विभाजन, GUI कंटेनर का मैन्युअल आकार बदलना, फ़ॉन्ट परिवर्तन आदि शामिल हैं।
जो मैं वास्तव में चाहता था वह कुछ था जो एक नई पंक्ति जोड़ देगा यदि टर्मिनल पहले कॉलम के अलावा किसी अन्य चीज पर अपना संकेत छापना शुरू कर देगा। ऐसा करने के लिए मुझे यह जानने की जरूरत है कि वर्तमान कॉलम को कैसे प्राप्त किया जाए, जिसे पाने के लिए मैंने इस उत्तर का उपयोग किया । अंतिम वर्किंग प्रॉम्प्ट कॉन्फ़िगरेशन निम्न है:
###
# Configure PS1 by using the old value but ensuring it starts on a new line.
###
__configure_prompt() {
PS1=""
if [ "$(__get_terminal_column)" != 0 ]; then
PS1="\n"
fi
PS1+="$PS1_WITHOUT_PREPENDED_NEWLINE"
}
###
# Get the current terminal column value.
#
# From /programming//a/2575525/549363.
###
__get_terminal_column() {
exec < /dev/tty
local oldstty=$(stty -g)
stty raw -echo min 0
echo -en "\033[6n" > /dev/tty
local pos
IFS=';' read -r -d R -a pos
stty $oldstty
echo "$((${pos[1]} - 1))"
}
# Save the current PS1 for later.
PS1_WITHOUT_PREPENDED_NEWLINE="$PS1"
# Use our prompt configuration function, preserving whatever existing
# PROMPT_COMMAND might be configured.
PROMPT_COMMAND="__configure_prompt;$PROMPT_COMMAND"
cat
, इसलिए मैं इसे अंतिम उपाय के रूप में उस समय के लिए रखूंगा जब यह मुद्दा मुझे फिर से परेशान करने लगेगा।