Saya mulai menggunakan jawaban @ Gilles, tetapi menemukan bahwa jika terminal mengubah jumlah kolom prompt tidak akan lagi pada awal baris seperti yang diharapkan. Hal ini dapat terjadi karena berbagai alasan, termasuk pemisahan tmux / layar, pengubahan ukuran wadah GUI secara manual, perubahan font, dll.
Yang benar-benar saya inginkan adalah sesuatu yang akan menambah baris baru jika terminal akan mulai mencetak prompt-nya di sesuatu selain kolom pertama. Untuk melakukan ini, saya perlu mencari cara mendapatkan kolom saat ini, yang saya gunakan untuk mendapatkan jawaban ini . Konfigurasi prompt kerja terakhir adalah di bawah ini:
###
# 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
, jadi saya akan menyimpan ini sebagai pilihan terakhir untuk saat masalah ini mulai mengganggu saya lagi.