Burada bulduğum bilgilere dayanarak, renk desteği de dahil olmak üzere sağa veya sola değişken uzunluktaki içeriği sağa çekerken sağa hizalamak için daha basit bir çözüm keşfedebildim. Rahatınız için buraya eklendi ...
Renkler hakkında not:\033
kaçışın alternatifler lehine kullanılması, \[\]
gruplama yapılmaksızın en uyumlu ve tavsiye edilen kanıtlar.
İşin püf noktası ilk önce sağ tarafı yazmak, sonra \r
satırın başlangıcına dönmek için satırbaşı ( ) işlevini kullanmak ve bunun üzerine sol taraftaki içeriğin üzerine yazmaya devam etmek:
prompt() {
PS1=$(printf "%*s\r%s\n\$ " "$(tput cols)" 'right' 'left')
}
PROMPT_COMMAND=prompt
tput cols
Mac OS X'te kullanıyorum terminalimden / konsolun genişliğinden var terminfo
varlığım $COLUMNS
doldurulmadığından alınıyor env
ancak yerine " *
" değerini yerine %*s
" ${COLUMNS}
" veya yerine başka bir değer girerek değiştirebilirsiniz.
Bir sonraki örnek, $RANDOM
farklı uzunluktaki içerik üretmek için kullanır , renkler içerir ve uygulamayı yeniden kullanılabilir işlevlere yeniden yansıtmak için işlevleri nasıl çıkarabileceğinizi gösterir.
function prompt_right() {
echo -e "\033[0;36m$(echo ${RANDOM})\033[0m"
}
function prompt_left() {
echo -e "\033[0;35m${RANDOM}\033[0m"
}
function prompt() {
compensate=11
PS1=$(printf "%*s\r%s\n\$ " "$(($(tput cols)+${compensate}))" "$(prompt_right)" "$(prompt_left)")
}
PROMPT_COMMAND=prompt
Yana printf
biz renkleri oluşturmak için gereken karakter miktarı telafi etmek gerek karakterlerin # olarak string uzunluğunu varsayar olmayan tazminatsız ANSI karakterleri baskılı çünkü, her zaman kısa ekranın sonu bulabilirsiniz. Renk için gereken karakterler sabit kalır ve ayrıca printf'nin uzunluktaki değişikliği de hesaba $RANDOM
katarsınız;
Bu (yani. Özel bash istemi çıkış sıralarını durum böyle değil \u
, \w
, \h
, \t
istemi görüntülendiğinde Printf dize kılmış sonra bash sadece çevirecektir çünkü bunlar sadece 2 uzunluğuna kaydeder gibi) olsa. Bu, sol tarafı etkilemez, ancak sağda olmalarını önlemek için en iyisidir.
Sonuçta oluşturulan içerik olsa da sabit uzunlukta kalırsa. Zaman olduğu gibi \t
her zaman 24 defa karakterler (8) aynı miktarda hale getirecek seçeneği. Bu durumlarda, yazdırıldığında 8 karakterle sonuçlanan 2 karakter arasındaki farkı karşılamak için gereken telafiyi hesaba katmamız gerekir.
Akılda tutulması gereken \\\
bazı kaçış dizileri üçlü kaçış gerekebileceğini unutmayın, aksi halde dizeleri anlam ifade eder. Aşağıdaki örnekte olduğu gibi, geçerli çalışma dizini kaçış \w
başka bir anlam ifade etmiyor, bu yüzden beklendiği gibi çalışıyor, ancak \t
sekme karakteri anlamına gelen süre , ilk önce üçlü çıkış yapmadan beklendiği gibi çalışmaz.
function prompt_right() {
echo -e "\033[0;36m\\\t\033[0m"
}
function prompt_left() {
echo -e "\033[0;35m\w\033[0m"
}
function prompt() {
compensate=5
PS1=$(printf "%*s\r%s\n\$ " "$(($(tput cols)+${compensate}))" "$(prompt_right)" "$(prompt_left)")
}
PROMPT_COMMAND=prompt
Njoy!