คำถามติดแท็ก shell

เชลล์เป็นอินเตอร์เฟสบรรทัดคำสั่งของ Unix คุณสามารถพิมพ์คำสั่งในเชลล์แบบโต้ตอบหรือเขียนสคริปต์เพื่อทำงานอัตโนมัติ ใช้แท็กนี้สำหรับคำถามที่ใช้กับ / bin / sh และเชลล์ที่เข้ากันได้มากที่สุด (ash, bash, ksh, zsh, …) สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาดโปรดตรวจสอบใน http://shellcheck.net ก่อนโพสต์ที่นี่

15
คุณทำการปรับแต่งอะไรบ้างในโปรไฟล์เชลล์เพื่อเพิ่มประสิทธิภาพ
ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันรู้ว่าบางคนมีสคริปต์เริ่มต้นและบางคนปรับเปลี่ยนข้อความในแบบของฉัน นักพัฒนาซอฟต์แวร์รายหนึ่งใช้นามแฝงสั้น ๆ สำหรับเส้นทางที่ยาวที่เขามักเข้าชมและคำสั่งที่ใช้บ่อย การปรับแต่งที่มีประสิทธิภาพทั้งหมดที่คุณทำในโปรไฟล์ UNIX ของคุณคืออะไรเพื่อเพิ่มประสิทธิภาพและความสะดวกในการใช้งาน?

2
วิธีการแทรกตัวแปรภายในสตริงที่มี“”?
ฉันต้องการสร้างสตริง xml โดยการแทรกตัวแปร: str1="Hello" str2="world" xml='<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>' echo $xml ผลลัพธ์ที่ควรจะเป็น <?xml version="1.0" encoding="iso-8859-1"?><tag1>Hello</tag1><tag2>world</tag2> แต่สิ่งที่ฉันได้คือ: <?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2> ฉันก็ลอง xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>" แต่จะลบเครื่องหมายคำพูดคู่ด้านในและให้ <?xml version=1.0 encoding=iso-8859-1?><tag1>hello</tag1><tag2>world</tag2>
25 bash  shell  variable  xml 

2
ความแตกต่างระหว่าง 'echo' และ 'echo -e' [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการ4 ปีที่แล้ว ความแตกต่างระหว่างechoและecho -eคืออะไร? ควรใช้เครื่องหมายคำพูด ("" หรือ '') ใดกับคำสั่ง echo เช่น: echo "Print statement"หรือecho 'Print statement'? นอกจากนี้มีตัวเลือกอะไรบ้างที่สามารถใช้ได้พร้อมกับecho?
25 shell 


3
$ # หมายถึงอะไรในเชลล์?
อะไร$#เฉลี่ยในเปลือก? ฉันมีรหัสเช่น if [ $# -eq 0 ] then ฉันต้องการเข้าใจความ$#หมาย แต่การค้นหาโดย Google นั้นแย่มากสำหรับการค้นหาสิ่งต่าง ๆ เหล่านี้

1
เชลล์เชิงโต้ตอบหมายถึงอะไร?
UNIX: การอ้างอิงที่สมบูรณ์, ฉบับที่สองโดย Kenneth H. Rosen และคณะ คุณสามารถเริ่มเชลล์อื่นหลังจากที่คุณล็อกอินโดยใช้ชื่อของเชลล์เป็นคำสั่ง ตัวอย่างเช่นในการเริ่มต้น Korn เชลล์คุณสามารถพิมพ์ ksh ที่พรอมต์คำสั่ง เชลล์ชนิดนี้ไม่ใช่เชลล์ล็อกอินและคุณไม่จำเป็นต้องล็อกอินอีกครั้งเพื่อใช้ แต่มันยังเป็นเชลล์แบบโต้ตอบซึ่งหมายความว่าคุณโต้ตอบกับเชลล์โดยการพิมพ์คำสั่ง (ต่างจากการใช้เชลล์เพื่อ เรียกใช้สคริปต์ตามที่กล่าวไว้ในบทที่ 20) อินสแตนซ์ของเชลล์ที่ทำงานในหน้าต่างเทอร์มินัลเมื่อคุณใช้ส่วนต่อประสานกราฟิกเป็นเชลล์ที่ไม่ได้ล็อกอินแบบโต้ตอบ เมื่อคุณเริ่มเชลล์ที่ไม่ได้ล็อกอินจะไม่อ่านไฟล์. profile, .bash_profile หรือ .login (หรือไฟล์. logout ของคุณ) แต่จะยังอ่านไฟล์คอนฟิกูเรชันเชลล์ตัวที่สอง (เช่น. bashrc) ซึ่งหมายความว่าคุณสามารถทดสอบการเปลี่ยนแปลงของคุณ ฉันกำลังผ่านเส้นข้างบนและฉันไม่เข้าใจความหมายของเชลล์เชิงโต้ตอบ เป็นความจริงหรือไม่ที่โปรไฟล์ไม่อ่านถ้าฉันใช้เทอร์มินัล ยิ่งไปกว่านั้นมันหมายความว่าอย่างไรเมื่อคุณพูดว่า bourne ไม่ใช่เชลล์เชิงโต้ตอบในขณะที่ bash / csh เป็นเชลล์เชิงโต้ตอบ?
25 shell 


3
อยู่ในไดเรกทอรีการทำงานเดียวกันเมื่อเปลี่ยนเป็น sudo
sudo -iเมื่อทำงานในบรรทัดคำสั่งผมมักจะเปลี่ยนไปใช้ sudo /rootอย่างไรก็ตามไดเรกทอรีการทำงานของฉันเปลี่ยนแปลงโดยอัตโนมัติ ฉันไม่ต้องการไปที่นั่น ฉันต้องการที่จะอยู่ในที่ที่ฉันอยู่! ฉันจะบรรลุสิ่งนี้ได้อย่างไร
25 shell  directory  sudo 

7
วิธีดูว่ามีการสลับบริบทกี่ครั้งในกระบวนการ
ฉันต้องการดูว่ากระบวนการของฉันทำให้เกิดการสลับบริบทมากมายหรือไม่ ฉันต้องการเห็นว่าการจัดการกลุ่มงานมีผลต่อจำนวนของการสลับบริบทอย่างไร
25 linux  shell  process 

2
ใช้สคริปต์ด้วย“ "และกับ" แหล่งที่มา "
ฉันสงสัยว่าสองวิธีต่อไปนี้ในการใช้งานสคริปต์ทุบตีนั้นเทียบเท่าหรือไม่ . ./myScript.sh source myScript.sh พวกเขาทั้งสองกำลังเรียกใช้เนื้อหาของสคริปต์แทนที่จะเรียกใช้สคริปต์เช่นไม่สร้าง subshell สำหรับเรียกใช้สคริปต์หรือไม่

2
จะรีเซ็ตสภาพแวดล้อมของเชลล์ได้อย่างไร?
ปัญหานี้บักฉันมาระยะหนึ่งแล้วและถึงแม้ว่าฉันคิดว่าฉันพบคำตอบของฉันผ่านEnvWatcherแต่น่าเสียดายที่มันใช้ได้กับ Bash เท่านั้น และฉันใช้ zsh ฉันต้องการจำลองสิ่งที่ env-watcher ทำในระดับที่น้อยกว่านี้ แต่ฉันต้องรู้ว่ามีคำสั่งที่ฉันสามารถรีเซ็ตเชลล์ให้อยู่ในระดับเริ่มต้นที่สะอาดหรือไม่ ตัวอย่างเช่นฉันต้องการมีเวิร์กโฟลว์ต่อไปนี้ source some-functions alias another-thing export SVN_EDITOR=vim RESET-ZSH # none of the above are valid any more มีความเป็นไปได้ในตัวเช่นนี้หรือฉันกำลังไล่ล่าผีเสื้อ?

5
ทำไมการแทนที่คำสั่งของเชลล์จึงฮุบไลน์อักขระบรรทัดใหม่?
ตามตัวอย่างต่อไปนี้และในคำถามล่าสุดของฉัน ในทุบตีอักขระขึ้นบรรทัดใหม่หายไปไหน ฉันต้องการรู้ว่า "ทำไม" มันเกิดขึ้น x="$(echo -ne "a\nb\n")" ; echo -n "$x" | xxd -p # Output is: 610a62 # The trailing newline from the 'echo' command # has been "deleted" by Command Substitution ฉันคิดว่าจะต้องมีเหตุผลที่สำคัญมากสำหรับการกระทำของเชลล์นั่นคือการแทนที่คำสั่งเพื่อลบข้อมูลบางส่วนออกจากผลลัพธ์ของคำสั่งมันเป็นการแทนที่ ... แต่ฉันไม่สามารถเอาหัวของฉันไปรอบ ๆ สิ่งนี้ได้ สิ่งที่ตรงกันข้ามที่ควรทำ .. คือ เพื่อส่งผ่านคำสั่งกลับไปยังกระบวนการสคริปต์ ... การถือตัวละครหนึ่งตัวกลับดูแปลกสำหรับฉัน แต่ฉันคิดว่ามันมีเหตุผลที่สมเหตุสมผลสำหรับมัน ... ฉันกระตือรือร้นที่จะค้นหาว่าเหตุผลนั้นคืออะไร .. .

2
วิธีการจับภาพสั่ง STDOUT / STDERR และเพิ่มการประทับเวลา / คำนำหน้า?
ฉันได้สำรวจคำถามที่คล้ายกันเกือบทั้งหมดที่ มีอยู่ แล้วเพื่อประโยชน์ ให้ฉันอธิบายปัญหาโดยละเอียด: ฉันรันสคริปต์ที่ไม่ต้องใส่ข้อมูลบางส่วนและสิ่งเหล่านี้สามารถสร้างเอาต์พุตมาตรฐานและบรรทัดข้อผิดพลาดมาตรฐานได้ฉันต้องการจับภาพพวกเขาตามลำดับที่ถูกต้องตามที่แสดงโดยเทอร์มินัลอีมูเลเตอร์แล้วเพิ่มคำนำหน้าเช่น "STDERR:" และ "STDOUT:" ฉันได้ลองใช้ไพพ์และแม้กระทั่งวิธีที่อิงจากพวกมันเพื่อประโยชน์แล้ว ฉันคิดว่าวิธีการแก้ปัญหาคือการใช้ pty แม้ว่าฉันจะไม่มีความเชี่ยวชาญในเรื่องนั้น ฉันได้แอบมองเข้าไปในซอร์สโค้ดของVTE ของ Gnomeแต่ก็ไม่ได้มีประโยชน์อะไรมาก เป็นการดีที่ฉันจะใช้Goแทน Bash เพื่อทำสิ่งนี้ แต่ฉันไม่สามารถทำได้ ดูเหมือนว่าท่อโดยอัตโนมัติห้ามการสั่งซื้อบรรทัดที่ถูกต้องเพราะบัฟเฟอร์ มีใครบางคนที่สามารถทำสิ่งที่คล้ายกันได้หรือไม่? หรือเป็นไปไม่ได้เลยเหรอ? ฉันคิดว่าถ้าเทอร์มินัลอีมูเลเตอร์สามารถทำได้มันอาจไม่ใช่ - โดยการสร้างโปรแกรม C ขนาดเล็กที่จัดการ PTY แตกต่างกันหรือไม่ นึกคิดฉันจะใช้อินพุตแบบอะซิงโครนัสเพื่ออ่านสตรีม 2 รายการ (STDOUT และ STDERR) จากนั้นพิมพ์อีกครั้งตามความต้องการของฉัน แต่ลำดับของอินพุตเป็นสิ่งสำคัญ! หมายเหตุ:ฉันทราบถึงstderredแต่มันไม่ได้ผลสำหรับฉันกับสคริปต์ Bash และไม่สามารถแก้ไขเพื่อเพิ่มคำนำหน้าได้อย่างง่ายดาย (เนื่องจากโดยทั่วไปแล้วจะมี syscalls มากมาย) อัปเดต:เพิ่มด้านล่างสองส่วน ตัวอย่างโปรแกรมที่สร้าง stdout ผสม / stderr ผลลัพธ์ที่คาดหวังจากโปรแกรมด้านบน …

3
ทุบตีรองรับการฟอร์กคล้ายกับส้อมของ C หรือไม่?
ฉันมีสคริปต์ที่ฉันต้องการแยกไว้ที่จุดหนึ่งเพื่อให้สคริปต์เดียวกันทำงานสองชุด ตัวอย่างเช่นฉันต้องการสคริปต์ทุบตีต่อไปนี้: echo $$ do_fork() echo $$ หากสคริปต์ทุบตีนี้มีอยู่จริงผลลัพธ์ที่คาดหวังจะเป็น: <ProcessA PID> <ProcessB PID> <ProcessA PID> หรือ <ProcessA PID> <ProcessA PID> <ProcessB PID> มีบางอย่างที่ฉันสามารถแทนที่ "do_fork ()" เพื่อรับเอาต์พุตชนิดนี้หรือทำให้สคริปต์ทุบตีทำส้อม C-like ได้หรือไม่
25 shell  fork 

2
ฉันจะลบไฟล์ทั้งหมดที่มีชื่อที่กำหนดในไดเรกทอรีย่อยทั้งหมดได้อย่างไร
ฉันต้องการลบไฟล์ทั้งหมดที่มีชื่อที่กำหนดในไดเรกทอรีย่อยทั้งหมดของโฮมไดเร็กตอรี่ของฉัน ฉันเหนื่อย: rm -r file ในโฮมไดเร็กตอรี่ของฉัน, แต่มันไม่ทำงานเพราะไฟล์นั้นไม่มีอยู่ในไดเรกทอรีนั้น.
25 shell  directory  rm 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.