KornShell'de Renkli Bilgi İstemi


11

Bu StackOverflow yazısına göre , KornShell'de renkli bir bilgi istemi olabilir. Bunu nasıl yapacağımı anlayamadım. Renk kullanabiliyorum:

echo -e "\033[34mLinux\033[00m"

mavi bir "Linux" çıktısı verir:

printf "\033[34mLinux\033[00m"

Ancak, kaçış kodlarını PS1istem değişkenime dahil ettiğimde, kaçmıyorlar . Renkli bir istem almak için ne yapmam gerekir? Vecize için enayi bir şey olmanın yanı sıra, çıktıyı görsel olarak ayrıştırırken renkli bir istemin yararlı olduğunu düşünüyorum.

Yanıtlar:


10

Sadece Ctrl- v, ile girilmiş bir gerçek Esc karakteri kullanın Esc(ekranda olduğu gibi görüntülenecektir ^[):

PS1="^[[34mLinux^[[00m"

Veya echoçalıştığını öğrendiğiniz komutun çıktısını kullanın :

PS1="$(echo -e "\033[35mLinux\033[00m")"

Bazen böyle bir komut satırı çaylak olduğumu fark ettim. Arkadaşlarımla karşılaştırıldığında genellikle kendimi çok iyi hissediyorum. :) İlk sürüm güzel çalıştı; ne güzel bir numara! İkinci versiyonda başarılı olamadım. +1
Kazark

5

PS1Değişkene gerçek bir kaçış karakteri koymanız gerekir . Ksh88 ve pdksh ve mksh (eski sürümler) gibi klonlar, printyerleşik karakterler dışında kontrol karakterleri için gerçek bir sözdizimine sahip değildir . Mksh \ekaçmayı anlar , fakat pdksh sekizli kodu gerektirir \033.

PS1=$(print '\033[34mLinux\033[00m')

ATT $'…'ksh93, boşluktan kaçan değişmez sözdizimini sunar (R39b'den beri mksh'de de mevcuttur). Bu değişmez değerlere kontrol karakterleri koymak için ters eğik çizgi kaçışlarını kullanabilirsiniz.

PS1=$'\e[34mLinux\e[00m'

2
Aslında, mkshaynı zamanda destekliyor $'…'- itiraf etmek gerekirse Dave Korn (Korn Shell'deki Korn) onu eklememde ısrar etti.
mirabilos

@mirabilos Ah, teşekkürler. Muhtemelen bu cevabı mksh R39 ile bir makineye yazdım ve daha yeni sürümleri kontrol etmedim.
Gilles 'SO- kötü olmayı bırak'

2

Bunları mkshbir kullanıcı için kullanıyorum shell:

# custom prompt see http://comments.gmane.org/gmane.os.miros.mksh/126
PS1=$'\a\r\a\e[1;34m\a ^ ^  ^ ^ | \a\e[36m\a${USER:=$(ulimit -c 0; id -un 2>/dev/null || echo
\?)}@${HOSTNAME%%.*}\a\e[34m\a | ^ ^  ^ ^ | \a\e[0;33m\a$(local d=${PWD:-?} p=~; [[ $p = ?(*/) ]] || d=${d/#$p/~};
print -nr -- "$d")\a\e[1;34m\a |\n ^ ^  ^ ^ | \a\e[32m\a$(date +%H:%M)\a\e[34m\a | ^ ^ >>\a\e[0m\a '

Ve biraz farklı bir shelliçin root:

PS1=$'\a\r\a\e[1;34m\a ^ ^  ^ ^  ^   \a\e[31m\a${USER:=$(ulimit -c 0; \
    id -un 2>/dev/null || echo \?)}@${HOSTNAME%%.*}\a\e[34m\a  ^ ^  ^ ^  ^ ^  ^   \a\e[0;33m\a$(
        local d=${PWD:-?} p=~
        [[ $p = ?(*/) ]] || d=${d/#$p/~}
        print -nr -- "$d"
)\a\e[1;34m\a  ^ ^ \n ^ ^  ^ ^  ^   \a\e[32m\a$(date +%H:%M)\a\e[34m\a  ^ ^  ^ ^   \a\e[0m\a '

resim açıklamasını buraya girin

Özel karakterler kopyalanmadığı için, hem normal kullanıcı hem de kök için bir macun macunu .


1

İnsanların cevaplarında, her biri farklı bir sözdizimi içeren çeşitli şeyler oluyor.

  1. Terminal programınız için kaçış dizileri dokümantasyonda verilmiştir.

  2. PS1 değişkenindeki terminal kaçış dizilerinin kodlanması, örneğin \ e veya değişmez kaçış. Bu kabuğa bağlıdır.

  3. Komut istemine değişiklik bilgileri nasıl eklenir, örneğin ana bilgisayar adı, geçerli dizin vb. Bu ayrıca kabuğa da bağlıdır. Çalışma dizini için \ w gibi özel ters eğik çizgi dizileri kullanabilirsiniz veya ortam değişkenlerini adlandırmanız veya komut satırlarını dizeye gömmeniz gerekebilir.

  4. Kabuğa hangi karakterlerin ve hangi karakterlerin yazdırılmadığını nasıl söylerim. Kabuk, terminal kaçış dizilerinizin nerede başladığını ve bittiğini bilmiyor. Kabukta bir komut satırı düzenleyicisi veya benzeri bir şey varsa, imlecin nerede olduğunu bilmek için hangi karakterlerin yazdırılacağını bilmesi gerekir. Bu ayrıntı olmadan, isteminiz doğru görünebilir, ancak düzenleme garip davranabilir.

    • Bash'da, \ [her kaçış dizisinden önce ve \] sonra koyarsınız.

    • Ksh içinde, dizede başka hiçbir yerde oluşamayan tek bir yazdırılmayan ASCII karakteri seçersiniz. Dizenin başlangıcında, o karakteri bir ASCII satırbaşı izler. Sonra her kaçış dizisinden önce ve sonra aynı karakteri yazarsınız. z3ntu işaretçi karakteri olarak \ a seçti.


0

Önceki cevaplar ve diğer kaynaklar sayesinde, bunlarla gelebildim:

Korn kabuk istemi:

PS1="$(echo "\033[32m`logname`\033[35m@\033[32m`hostname` \033[33m`pwd`\033[36m\n\$\033[0m")"

Bash istemi:

PS1="\[\e[32m\]\u\[\e[35m\]@\[\e[32m\]\h \[\e[33m\]\w\[\e[36m\]\n\$\[\e[0m\]"

Bunlar aynı renkli istemi (evet, Queen's English;) konuşuyorum):

username@computername /current/working/directory
$

DOS eşdeğeri (renk seçenekleri olmasa da):

prompt %username%@%computername% $P$_$G

hangi verir:

username@computername /current/working/directory
>

">", "$" İle "nixy" yerine "DOSsy" tutuyor, ancak bunun yerine sigil ("$") istiyorsanız:

prompt %username%@%computername% $P$_$$

Giriş hesabınızın "izinleri" kalıcı hale getirmek için gerekli izinlere sahip olması şartıyla, "dışa aktarma" ile başlıyor:

export PS1="..."

ve DOSsy'yi şu şekilde değiştirin:

setx PROMPT "%username%@%computername% $P$_$G"

veya

setx PROMPT "%username%@%computername% $P$_$$"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.