2016-03-24 24 views
0

Merhaba ben size bir komut çalıştırmak ve ne zaman istemi yükler sonucu her şey yazdırırım Bu nasılZsh İstemi Özelleştirme

export PROMPT="This is the date %d" 

gibi istemini düzenlemek için istemi değişkeni ayarlamak biliyoruz.

+0

yoktur. 'export', daha sonra başlatılan süreçlerin ortamına bir parametre sunar. – Adaephon

cevap

1

bunu başarmak için aslında iki (ana) yol vardır:

setopt promptsubst 
PROMPT='Date %d Result $(a_command) ' 
  • promptsubst olmak zorunda istemi

    bir parçası olarak bir komutu çalıştırmak için

    1. Kullanım komut ikamesi etkinse, zsh, hiçbir paremetre genişletme, aritmetik genişletme veya komut ikamesi yapmayacaktır.

    2. Ayrıca, hızlı yanıt metni, PROMPT ayarlandığında genişletme yapılmayacak şekilde tırnak içine alınmalıdır.

      PROMPT="Date %d Result \$(a_command) Const $(another_command)" 
      

      PROMPT ayarlarken Bu $(another_command) genişleyecektir (yani çalıştırılır: Yani ya gerektiğinde bunları ayrı ayrı alıntı bir \ ile tek tırnak içine koyun ya, sen/çift tırnak kullanmak istiyorsanız varsa, başına $ her seferinde bir kez ve bir kez daha kalıcı olarak değiştirilen sonuç) ve $(a_command).

  • olun precmd fonksiyonu (veya kanca) kullanılması ve psvar dizi:

    autoload -Uz add-zsh-hook 
    a_function() { 
        psvar[1]=$(a_command) 
    } 
    two_function() { 
        psvar[2]=$(two_command) 
    } 
    add-zsh-hook precmd a_function 
    add-zsh-hook precmd two_function 
    PROMPT='Date %d Result1 %v Result2 %2v ' 
    
    • grubu ise, precmd işlev istemi basılır hemen önce gerçekleştirilir. precmd_functions dizisinde çalıştırılacak işlevlerin listesini de ayarlayabilirsiniz.
    • add-zsh-hook, bu diziye işlev eklemenin kolay bir yolunu sunar. Komut isteminde,
    • %Nv, psvar dizisinin N-öğesiyle değiştirilir. N (%v) N==1 varsayılır dışarı bırakılırsa ikinci yöntem daha sonra sadece promptsubst kullanarak çok daha karmaşık görünebilir ilk bakışta
  • (bu aynı zamanda sayısal bağımsız değişken alır diğer istemi simgesi için geçerlidir). Ancak bu sadece çok basit ikameler için geçerlidir. precmd kullanmak, $()'un içinde çeşitli kod satırlarının karıştırılması nedeniyle okunamayan PROMPT tanımını yapmadan daha karmaşık işlevlerin kullanılmasına izin verir.

    Ayrıca iki yaklaşımı birleştirmek ve bazı veya tüm vakalarda psvar kullanımını vazgeçmek: Bir kabukları yapılandırma parametrelerini dışa gerek genellikle

    autoload -Uz add-zsh-hook 
    setopt promptsubst 
    a_function() { 
        a_parameter=$(a_command) 
    } 
    two_function() { 
        psvar[2]=$(two_command) 
    } 
    add-zsh-hook precmd a_function 
    add-zsh-hook precmd two_function 
    PROMPT='Date %d Result ${a_parameter} %2v' 
    
    +1

    '$ (...)' * * komut * ikamesidir. Proses ikamesi genellikle I/O yönlendirme ile kullanılır. – chepner

    +0

    Elbette doğru. Yakalama için teşekkürler, ben tamir ettim. – Adaephon