ฉันคิดว่านี่ไม่ได้ตรงไปตรงมาอย่างที่ใคร ๆ ก็คิดว่า คุณต้องสกัดกั้น STDOUT เนื่องจากโปรแกรมภายนอกเขียนไปยังช่องนั้นโดยตรง
ต่อไปนี้เป็นชนิดของหลักฐานของแนวคิด โปรดทราบว่าการทำเช่นนี้จะทำลายหลายสิ่งหลายอย่างเช่นโปรแกรมแบบอินเทอร์แอคทีฟman
และless
อื่น ๆ ดังนั้นจึงไม่สามารถใช้งานได้ทุกวัน แต่เพื่อจัดรูปแบบเซสชันเชลล์สำหรับโพสต์ใน SU
วิธีการนี้ถูกโพสต์โดย Atom Smasher ในzsh-users
เมลในวันเสาร์, 16 พฤษภาคม 2009STDERR
สีสัน ฉันนำไปใช้กับความต้องการของคุณ:
# ## indent_output.zsh ##
zmodload zsh/terminfo zsh/system
autoload is-at-least
indent_output() {
while sysread line
do
testline=${line//$'\n'/$'\n' }
syswrite " ${testline}"
done
}
precmd() { sleep 0 }
## i'm not sure exactly how far back it's safe to go with this
## 4.3.4 works; 4.2.1 hangs.
is-at-least 4.3.4 && exec > >(indent_output)
ส่วนที่ยุ่งยากคือการexec > >(indent_output)
ประมวลผลเอาต์พุตที่สมบูรณ์ของเชลล์การแทนที่ผ่านindent_output
ฟังก์ชัน precmd
ความหมายเป็นสิ่งที่จำเป็นเพื่อหลีกเลี่ยงสภาพการแข่งขันมิฉะนั้นพรอมต์ใหม่จะถูกพิมพ์ก่อนที่จะมีการส่งออกที่แท้จริงของคำสั่งประหารชีวิต
นี่คือตัวอย่าง:
% source indent_output.zsh
% ls /bin | head
[.exe
2to3
2to3-3.2
411toppm.exe
7z
7za
7zr
a2p.exe
aaflip.exe
aclocal
%
% date
Sat, Nov 08, 2014 5:58:29 PM
%
% cat /usr/share/doc/foo
cat : /usr/share/doc/foo : No such file or directory
%
% cat /usr/share/doc/zsh-5.0.6/INSTALL| head
++++++++++++++
INSTALLING ZSH
++++++++++++++
This file is divided into two parts: making and installing the shell, a
note on the script run to set up the environment for new users, and
a description of various additional configuration options. You should
have a look at the items in the second and third parts before following the
instructions in the first.
%
%
คุณสามารถกำจัด%
เครื่องหมายก่อนทุกพรอมต์ (ซึ่งแสดงว่าบรรทัดสุดท้ายไม่ได้ลงท้ายด้วยCR
) ด้วยสองตัวเลือกเหล่านี้:
setopt PROMPT_CR NO_PROMPT_SP
%
สัญลักษณ์ตลกไว้ที่ด้านล่าง (ข) ส่งมอบหน้าคนและ (c) ผลักls
ไปที่คอลัมน์เดียว อย่างไรก็ตามการสูญเสียของสีสำหรับผลผลิต git อาจเป็นตัวแบ่งการจัดการสำหรับฉัน