Tôi bắt đầu sử dụng câu trả lời của @ Gilles, nhưng thấy rằng nếu thiết bị đầu cuối thay đổi số lượng cột, dấu nhắc sẽ không còn ở đầu dòng như mong đợi. Điều này có thể xảy ra vì nhiều lý do, bao gồm chia tách tmux / màn hình, thay đổi kích thước thủ công của bộ chứa GUI, thay đổi phông chữ, v.v.
Những gì tôi thực sự muốn là một cái gì đó sẽ thêm một dòng mới nếu thiết bị đầu cuối sẽ bắt đầu in dấu nhắc của nó tại một cái gì đó không phải là cột đầu tiên. Để làm điều này tôi cần phải tìm ra cách lấy cột hiện tại, mà tôi đã sử dụng câu trả lời này để có được. Cấu hình nhắc nhở làm việc cuối cùng là dưới đây:
###
# 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
, vì vậy tôi sẽ giữ điều này như là phương sách cuối cùng cho đến khi vấn đề này bắt đầu làm phiền tôi một lần nữa.