สิ่งที่ฉันได้รับ:
host:~ user$ cat example.txt
some texthost:~ stas$
สิ่งที่ฉันต้องการได้รับ:
host:~ user$ cat example.txt
some text
host:~ stas$
มีวิธีที่ฉันสามารถcat
ประพฤติเช่นนี้หรือไม่?
ฉันใช้ทุบตีใน Mac OS X
สิ่งที่ฉันได้รับ:
host:~ user$ cat example.txt
some texthost:~ stas$
สิ่งที่ฉันต้องการได้รับ:
host:~ user$ cat example.txt
some text
host:~ stas$
มีวิธีที่ฉันสามารถcat
ประพฤติเช่นนี้หรือไม่?
ฉันใช้ทุบตีใน Mac OS X
คำตอบ:
เครื่องมือ unix ส่วนใหญ่ได้รับการออกแบบให้ทำงานได้ดีกับไฟล์ข้อความ ไฟล์ข้อความประกอบด้วยลำดับของบรรทัด บรรทัดประกอบด้วยลำดับของอักขระที่พิมพ์ได้ซึ่งลงท้ายด้วยอักขระขึ้นบรรทัดใหม่ โดยเฉพาะอย่างยิ่งอักขระสุดท้ายของไฟล์ข้อความที่ไม่ว่างเปล่าจะเป็นอักขระขึ้นบรรทัดใหม่เสมอ เห็นได้ชัดว่าexample.txt
มีเฉพาะsome text
เมื่อไม่มีการขึ้นบรรทัดใหม่ดังนั้นจึงไม่ใช่ไฟล์ข้อความ
cat
ทำงานง่ายๆ การเปลี่ยนไฟล์ตามอำเภอใจให้เป็นไฟล์ข้อความไม่ได้เป็นส่วนหนึ่งของงานนั้น เครื่องมืออื่น ๆ จะเปลี่ยนอินพุตเป็นไฟล์ข้อความเสมอ ถ้าคุณไม่แน่ใจว่าไฟล์ที่คุณกำลังแสดงจบลงด้วยการขึ้นบรรทัดใหม่ให้ลองเรียกใช้แทนawk 1
cat
คุณสามารถทำให้ bash แสดงพรอมต์บนบรรทัดถัดไปหากคำสั่งก่อนหน้านี้ปล่อยเคอร์เซอร์ไว้ที่อื่นนอกเหนือจากระยะขอบสุดท้าย ใส่สิ่งนี้ในของคุณ.bashrc
(รูปแบบโดยรับฟรีข้อเสนอโดย Dennis Williamson ):
shopt -s promptvars
PS1='$(printf "%$((COLUMNS-1))s\r")'$PS1
PROMPT_COMMAND
และถ้ามันไม่เป็น 0 ใช้บรรทัดใหม่ ( \n
) PS1
เป็นตัวอักษรตัวแรกของ
ฉันชอบวิธีต่อไปนี้ ...
cat example.txt ; echo
สิ่งนี้ไม่ได้ประเมินเนื้อหาของexample.txt
หรือเพิ่มบรรทัดใหม่ในบางครั้ง มันเป็นเพียงการสะท้อนให้เห็นถึง newline เมื่อแมวทำเสร็จแล้วจำได้ง่ายและไม่มีใครคิดว่าพวกเขากำลังใช้คำพูดที่แข็งแกร่งหรืออ่อนแออย่างถูกต้อง
ข้อเสียเพียงอย่างเดียวคือคุณจะได้รับการขึ้นบรรทัดใหม่หากไฟล์มีการขึ้นบรรทัดใหม่ของตัวเอง
ฉันเริ่มใช้คำตอบของ @ Gilles แต่พบว่าหากเทอร์มินัลเปลี่ยนจำนวนคอลัมน์การแจ้งจะไม่อยู่ที่จุดเริ่มต้นของบรรทัดอีกต่อไปตามที่คาดไว้ สิ่งนี้สามารถเกิดขึ้นได้จากหลายสาเหตุรวมถึงการแยก tmux / หน้าจอการปรับขนาดด้วยตนเองของคอนเทนเนอร์ GUI การเปลี่ยนแบบอักษรและอื่น ๆ
สิ่งที่ฉันต้องการจริงๆคือสิ่งที่จะเพิ่มบรรทัดใหม่หากเทอร์มินัลจะเริ่มพิมพ์พรอมต์ที่สิ่งอื่นนอกเหนือจากคอลัมน์แรก เมื่อต้องการทำสิ่งนี้ฉันต้องหาวิธีรับคอลัมน์ปัจจุบันซึ่งฉันใช้คำตอบนี้เพื่อรับ การกำหนดค่าที่พร้อมใช้งานขั้นสุดท้ายอยู่ด้านล่าง
###
# Configure PS1 by using the old value but ensuring it starts on a new line.
###
__configure_prompt() {
PS1=""
if [ "$(__get_terminal_column)" != 0 ]; then
PS1="\n"
fi
PS1+="$PS1_WITHOUT_PREPENDED_NEWLINE"
}
###
# Get the current terminal column value.
#
# From /programming//a/2575525/549363.
###
__get_terminal_column() {
exec < /dev/tty
local oldstty=$(stty -g)
stty raw -echo min 0
echo -en "\033[6n" > /dev/tty
local pos
IFS=';' read -r -d R -a pos
stty $oldstty
echo "$((${pos[1]} - 1))"
}
# Save the current PS1 for later.
PS1_WITHOUT_PREPENDED_NEWLINE="$PS1"
# Use our prompt configuration function, preserving whatever existing
# PROMPT_COMMAND might be configured.
PROMPT_COMMAND="__configure_prompt;$PROMPT_COMMAND"
__get_terminal_column
ใช่หรือไม่
PS1="\n"
ฉันเพียงแค่มีและไม่จำเป็นต้องปรับเปลี่ยนecho
PS1
ปัญหาที่อาจเกิดขึ้นคือ example.txt ของคุณไม่มีบรรทัดใหม่ที่ท้ายไฟล์ของคุณ
cat
งานดังนั้นฉันอาจกำลังมองหาวิธีแก้ปัญหาบางอย่าง
example.txt
ไม่มีบรรทัดใหม่ที่ท้ายไฟล์เป็นจุดรวมของคำถาม
หากคุณยืนยันในการใช้cat
งานสิ่งนี้จะใช้ได้กับไฟล์ทั้งสองประเภทโดยมีและไม่มีบรรทัดใหม่ในตอนท้าย:
echo "`cat example.txt`"
คุณสามารถเปลี่ยนเป็นฟังก์ชั่นที่มีชื่อที่คุณเลือก (คู่cat
) ใน.bashrc
:
cat1(){ echo "`/bin/cat $@`";}
คุณสามารถเพิ่ม. bashrc ได้เช่นกัน
PROMPT_COMMAND="printf '\n';$PROMPT_COMMAND"
ทำงานได้สำหรับฉัน
cat
ดังนั้นฉันจะเก็บเรื่องนี้ไว้เป็นทางเลือกสุดท้ายสำหรับช่วงเวลาที่ปัญหานี้เริ่มรบกวนฉันอีกครั้ง