จากman watch
:
อักขระที่ไม่พิมพ์ถูกแยกออกจากผลลัพธ์ของโปรแกรม ใช้ "cat -v" เป็นส่วนหนึ่งของไพพ์ไลน์คำสั่งหากคุณต้องการดู
ดังนั้นฉันจะใช้cat -v
อย่างไรถ้าฉันต้องการดูผลลัพธ์สีจาก:
watch ls -al --color
จากman watch
:
อักขระที่ไม่พิมพ์ถูกแยกออกจากผลลัพธ์ของโปรแกรม ใช้ "cat -v" เป็นส่วนหนึ่งของไพพ์ไลน์คำสั่งหากคุณต้องการดู
ดังนั้นฉันจะใช้cat -v
อย่างไรถ้าฉันต้องการดูผลลัพธ์สีจาก:
watch ls -al --color
คำตอบ:
คำสั่งที่ถูกต้องคือ
watch --color "ls -a1 --color"
มันไม่ได้จัดทำเป็นเอกสารไว้ใน man page หรือหน้าจอ --help ฉันต้องใช้สตริงเพื่อค้นหา
watch --color "sudo iwlist wlan0 scanning | egrep 'Quality|ESSID' | egrep --color -i 'foobar|$'"
จะกินสี :(
watch
จาก procps (เริ่มต้นบนลินุกซ์ distros ส่วนใหญ่ผมเชื่อว่า) มี--color
ตัวเลือกตั้งแต่ V3.3.2
ฉันคิดว่าอาจเป็นไปไม่ได้ด้วยคำสั่ง 'watch' นี่เป็นอีกวิธีในการทำ:
while true; do clear; date;echo;ls -al --color; sleep 2; done
คุณสามารถใส่ไว้ในสคริปต์ตัวอย่างเช่น:
echo "while true; do clear; date;echo;\$*;sleep 2; done" > watch2
chmod +x watch2
./watch2 ls -al --color
เพื่อชี้แจงนี่คือเหตุผลที่ฉันคิดว่ามันเป็นไปไม่ได้ด้วยคำสั่ง 'watch' ดูว่าเกิดอะไรขึ้นถ้าคุณใช้ cat -v:
watch "ls -al --color|cat -v"
มันแสดงให้คุณเห็นถึงตัวควบคุมสี ... ซึ่งฉันคิดว่าไม่ใช่สิ่งที่คุณต้องการ
man watch
watch
อย่างเห็นได้ชัดให้เห็นว่ามันควรจะเป็นไปโดยไม่ชอบขี้หน้า
cat -v
เพื่อดูว่าman watch
กำลังพูดถึงอะไร
while true; do out=$(date;echo;ls -al --color);clear;echo $out;sleep 2;done
echo "$out"
คุณควรใช้คำพูดในการจัดการหลายบรรทัด: stackoverflow.com/q/2414150/86967
หากคุณใช้ Mac เช่นฉันwatch
จาก Homebrew ไม่รองรับสี
สิ่งที่คุณต้องการคือfswatchแต่ยังไม่เป็น Homebrew หากต้องการติดตั้งคุณจะต้องทำสิ่งที่ซับซ้อนกว่านี้เล็กน้อย
https://raw.github.com/mlevin2/homebrew/116b43eaef08d89054c2f43579113b37b4a2abd3/Library/Formula/fswatch.rb
ดูคำตอบ SO นี้สำหรับการใช้งาน
watch
ใช้กับคำสั่ง
UPDATE : เปลี่ยนเวอร์ชั่นล่าสุดของการwatch
แก้ไขปัญหา ดังนั้นถ้าสีของwatch --color
ผิดมันอาจจะดีกว่าที่จะอัพเดทมัน (ในระบบของฉันมันอยู่ในprocps
แพ็คเกจ)
การรองรับสีwatch --color
มี จำกัด ในประสบการณ์ของฉัน (แต่เพียงพอสำหรับls -l --color
) นี่คือคำตอบของ @davr รุ่นของฉันพร้อมด้วยคุณสมบัติพิเศษบางอย่างที่สำคัญที่สุดคือลดการสั่นไหว คุณสามารถวางไว้ใน .bashrc cwatch ls -l --color
ของคุณและใช้มันเป็น
# `refresh cmd` executes clears the terminal and prints
# the output of `cmd` in it.
function refresh {
tput clear || exit 2; # Clear screen. Almost same as echo -en '\033[2J';
bash -ic "$@";
}
# Like watch, but with color
function cwatch {
while true; do
CMD="$@";
# Cache output to prevent flicker. Assigning to variable
# also removes trailing newline.
output=`refresh "$CMD"`;
# Exit if ^C was pressed while command was executing or there was an error.
exitcode=$?; [ $exitcode -ne 0 ] && exit $exitcode
printf '%s' "$output"; # Almost the same as echo $output
sleep 1;
done;
}
คุณสามารถลองทำสิ่งต่าง ๆ เช่น
cwatch 'ls -l --color | head -n `tput lines`'
หากเทอร์มินัลของคุณมีบรรทัดน้อยกว่าเอาต์พุต ซึ่งจะทำงานได้ก็ต่อเมื่อทุกบรรทัดสั้นกว่าความกว้างเทอร์มินัล วิธีแก้ปัญหาที่ดีที่สุดที่ฉันรู้คือ:
cwatch 'let lines=`tput lines`-2; ls -l --color | head -n $lines'