Score:3

ฉันจะดู stdout / stderr จากเชลล์ล็อกอิน bash ได้อย่างไร

ธง cn

ฉันกำลังพยายามแก้ปัญหาแปลกๆ ของฉัน ~/.bash_profileและฉันต้องการดูว่ามีข้อผิดพลาด / ฯลฯ พิมพ์เมื่อรันหรือไม่ มีบันทึกบางอย่างหรือที่ใดที่หนึ่งที่มี stdout และ/หรือ stderr ของกระบวนการล็อกอินเชลล์หรือไม่ ขอบคุณ!

muru avatar
us flag
หากมี มักจะถูกพิมพ์ในเทอร์มินัลที่คุณเรียกใช้เปลือกนั้น
stumblebee avatar
mx flag
@muru ฉันคิดแบบเดียวกัน ฉันสร้างข้อผิดพลาดใน `~/.profile` โดยไม่มี `~/.bash_profile` ข้อความแสดงข้อผิดพลาดไม่ผ่าน ตรวจสอบคำตอบที่ไม่ได้ลบของฉัน
muru avatar
us flag
@stumblebee แท็บเทอร์มินัลใหม่จะไม่เรียกใช้เชลล์การเข้าสู่ระบบ เว้นแต่คุณจะกำหนดค่าโปรแกรมจำลองเทอร์มินัลด้วยวิธีนั้น
stumblebee avatar
mx flag
@muru คุณถูกต้องอย่างแน่นอน! ~./.bashrc ทำ แต่ ~/.profile ไม่ ฉันควรจะรัน `sudo login` ฉันจะลดคำตอบเดิมของฉันและดูดความอัปยศ
vanadium avatar
cn flag
คุณสามารถจัดหาไฟล์ในเทอร์มินัลปัจจุบันของคุณ: `source .bash_profile`
sancho.s ReinstateMonicaCellio avatar
สวัสดี. คุณมีข้อเสนอแนะเกี่ยวกับสิ่งที่แนะนำหรือไม่? นั่นเป็นสิ่งจำเป็นสำหรับชุมชน
Score:0
ธง mx

แย่ และ สตเดอร์ จะปรากฏในเทอร์มินัลทุกครั้งที่คุณเข้าสู่ระบบคุณต้องออกจากระบบและลงชื่อเข้าใช้ใหม่อีกครั้งเพื่อให้การเปลี่ยนแปลงในโปรไฟล์ของคุณมีผล คำอธิบายเพิ่มเติมเกี่ยวกับการใช้ ~/.bash_profile มีให้ ที่นี่ บน ถาม Ubuntu ด้วย a คำตอบที่ดี

Score:0
ธง cn

Tbh ฉันไม่ได้ลองด้วยตัวเอง แต่ฉันค่อนข้างแน่ใจว่าเอาต์พุตมาตรฐานและข้อผิดพลาดคือเทอร์มินัลที่รันอยู่ ทันทีที่กระบวนการเริ่มต้น คุณสามารถตรวจสอบได้โดยใส่คำสั่งเช่น เสียงสะท้อน "สวัสดีชาวโลก" ในของคุณ .bash_profile...

Score:0

ในการดีบักสคริปต์ทุบตี คุณมีหลายตัวเลือก และบางตัวเลือกมีประสิทธิภาพมากกว่าการเปลี่ยนเส้นทาง stdout/stderr

เปิดใช้งาน ติดตาม

คุณสามารถเพิ่มของคุณ ~/.bash_profile (สร้างการติดตามเฉพาะส่วนเฉพาะของสคริปต์ของคุณ) ด้วย

set -x # เปิดใช้งานการดีบักจากที่นี่
<คำสั่ง>
ตั้งค่า +x # หยุดการดีบักจากที่นี่

อีกด้วย, ชุด -v พิมพ์บรรทัดอินพุตของเชลล์ขณะที่อ่าน และ ชุด +v ปิดใช้งานสิ่งนี้ ด้วยสิ่งนี้เพียงอย่างเดียว คุณอาจจะจับปัญหาได้

การติดตามการเปลี่ยนเส้นทาง

ใช้ ทุบตีตัวแปร BASH_XTRACEFD

หากตั้งค่าเป็นจำนวนเต็มตามตัวอธิบายไฟล์ที่ถูกต้อง Bash จะเขียนเอาต์พุตการติดตามที่สร้างขึ้นเมื่อเปิดใช้งาน âset -xâ ให้กับตัวอธิบายไฟล์นั้น ซึ่งช่วยให้เอาต์พุตการติดตามแยกออกจากข้อความวินิจฉัยและข้อความแสดงข้อผิดพลาดได้ ตัวอธิบายไฟล์ถูกปิดเมื่อ BASH_XTRACEFD ไม่ได้ตั้งค่าหรือกำหนดค่าใหม่ การยกเลิกการตั้งค่า BASH_XTRACEFD หรือการกำหนดสตริงว่างทำให้เอาต์พุตการติดตามถูกส่งไปยังข้อผิดพลาดมาตรฐาน โปรดทราบว่าการตั้งค่า BASH_XTRACEFD เป็น 2 (ตัวอธิบายไฟล์ข้อผิดพลาดมาตรฐาน) จากนั้นยกเลิกการตั้งค่าจะส่งผลให้ข้อผิดพลาดมาตรฐานถูกปิด

ดังนั้นคุณจะใช้

ผู้บริหาร 5> ~/bash_profile_ouput.txt
BASH_XTRACEFD="5"
<คำสั่ง>
ยกเลิกการตั้งค่า BASH_XTRACEFD

พิมพ์เลขบรรทัด

ใช้ ทุบตีตัวแปร ไลน์โน (และ BASH_LINENO, BASH_SOURCE และ/หรือ FUNCNAME ในกรณีที่ซับซ้อนกว่านี้)

echo "กำลังดำเนินการ ${LINENO}"
<คำสั่ง>

เปลี่ยนเส้นทาง stdout/stderr

รวมกัน สั่งการ ผู้บริหาร ด้วยการเปลี่ยนเส้นทาง และอาจเป็นไปได้ ที. ดูคำตอบ ที่นี่ซึ่งรวมถึงวิธีการ/"กลเม็ด" อื่นนอกเหนือจากการใช้ ผู้บริหาร.

ที่เกี่ยวข้อง:

  1. https://stackoverflow.com/questions/44249890/pipe-bash-stdout-only-in-debug-mode
  2. https://unix.stackexchange.com/questions/334382/find-out-what-scripts-are- being-run-by-bash-on-startup
  3. https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา