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

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

2
Dash, Ash และ sh รองรับสคริปต์ได้ 100% หรือไม่
ฉันต้องการทราบว่าสคริปต์ที่เขียนขึ้นสำหรับเส้นประเถ้าและ sh เข้ากันได้ 100% หรือไม่ มีฟีเจอร์ที่เพิ่มเข้ามาเพื่อขีดหรือเถ้าหรือการเปลี่ยนแปลงทางไวยากรณ์หรือไม่? จากสิ่งที่ฉันได้ยินเถ้าเป็นลูกหลานของดวลจุดโทษโดยตรง

4
เปลี่ยนแบบอักษรในคำสั่ง echo
เป็นไปได้หรือไม่ที่จะเปลี่ยนคุณลักษณะแบบอักษรของเอาต์พุตของ echo ใน zsh หรือ bash? สิ่งที่ฉันต้องการเป็นสิ่งที่คล้ายกับ: echo -n "This is the font: normal " echo -n $font=italic "italic," echo -n $font=bold "bold," echo -n "and" echo -n $font=small "small". เพื่อที่จะพิมพ์: "นี่คือตัวอักษร: ปกติ, ตัวเอียง , ตัวหนา , ขนาดเล็ก " ในบรรทัดของข้อความ
16 bash  shell  zsh  fonts 

3
การแยกคำคืออะไร เหตุใดการเขียนโปรแกรมเชลล์จึงมีความสำคัญ
zshฉันได้รับสับสนเกี่ยวกับคำบทบาทแยกเล่นใน ฉันไม่ได้สัมผัสกับแนวคิดนี้เมื่อการเขียนโปรแกรมใน C, Python หรือ MATLAB และสิ่งนี้ได้กระตุ้นความสนใจของฉันว่าทำไมการแยกคำดูเหมือนจะเป็นสิ่งที่เฉพาะเจาะจงสำหรับการเขียนโปรแกรมเชลล์ ฉันได้อ่านเกี่ยวกับการแยกคำในเว็บไซต์นี้และเว็บไซต์อื่น ๆ มาก่อน แต่ไม่พบคำอธิบายที่ชัดเจนเกี่ยวกับแนวคิด Wikipedia มีคำจำกัดความของการแยกคำแต่ดูเหมือนจะไม่มีการอ้างอิงถึงวิธีการนำไปใช้กับ Unix shells นี่คือตัวอย่างของความสับสนของฉันในzsh: ในคำถามที่พบบ่อยของZ Shellฉันอ่านต่อไปนี้: 3.1: ทำไมไม่$varที่var="foo bar"ไม่ได้ทำในสิ่งที่ผมคาดหวัง? ในอนุพันธ์บอร์นเชลล์ส่วนใหญ่ตัวแปรหลายคำเช่น var="foo bar" แบ่งออกเป็นคำต่าง ๆ เมื่อส่งผ่านไปยังคำสั่งหรือใช้ในการfor foo in $varวนซ้ำ โดยค่าเริ่มต้น zsh ไม่ได้มีพฤติกรรมที่: ตัวแปรยังคงเหมือนเดิม (นี่ไม่ใช่ข้อผิดพลาด! ดูด้านล่าง) มีตัวเลือกSH_WORD_SPLITให้ใช้งานร่วมกันได้ อย่างไรก็ตามในคู่มือ Z Shellฉันอ่านต่อไปนี้: SH_WORD_SPLIT (-y) <K> <S> ทำให้การแยกฟิลด์ดำเนินการกับการขยายพารามิเตอร์ที่ไม่ได้ระบุไว้ โปรดทราบว่าตัวเลือกนี้ไม่มีส่วนเกี่ยวข้อง กับการแยกคำ (ดูการขยายพารามิเตอร์) ทำไมมันไม่บอกว่าSH_WORD_SPLITมีอะไรจะทำอย่างไรกับการแยกคำ? การแยกคำไม่ใช่สิ่งที่ถูกต้องหรือไม่
16 shell  zsh 

3
ใช้เครื่องหมายปีกกา (เครื่องหมายปีกกา) เพื่อสร้างโครงสร้างโฟลเดอร์ด้วย `mkdir -p`
ในฐานะman mkdirรัฐ -p, --parents no error if existing, make parent directories as needed เมื่อฉันรันคำสั่งนี้ mkdir -p work/{F1,F2,F3}/{temp1,temp2} มันจะสร้างโครงสร้างของโฟลเดอร์เช่นนี้workโฟลเดอร์หลักแล้วF1, F2, F3โฟลเดอร์และเด็กtemp1และtemp2โฟลเดอร์เด็กอายุต่ำกว่าสามโฟลเดอร์หลักF1, ,F2F3 work -F1 -temp1 -temp2 -F2 -temp1 -temp2 -F3 -temp1 -temp2 ตอนนี้ปัญหาคือว่าผมต้องการที่จะสร้างtemp1, temp2โฟลเดอร์เฉพาะภายใต้F1ไม่อยู่ภายใต้F2และF3แต่ฉันสับสนเกี่ยวกับวิธีการที่ฉันสามารถเขียนคำสั่งที่จะทำสิ่งที่ฉันต้องการ

6
ทรัพยากรออนไลน์ที่ดีสำหรับการเรียนรู้การเขียนสคริปต์เชลล์คืออะไร [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันสนใจที่จะเรียนรู้เชลล์สคริปต์อย่างสมบูรณ์ ใครสามารถแนะนำแหล่งข้อมูลออนไลน์ที่ดีได้บ้าง?

3
ฉันจะเชื่อมตัวแปรเชลล์เข้ากับพารามิเตอร์อื่น ๆ ในบรรทัดคำสั่งของฉันได้อย่างไร
ฉันจะเชื่อมตัวแปรเชลล์เข้ากับพารามิเตอร์อื่น ๆ ในบรรทัดคำสั่งของฉันได้อย่างไร ตัวอย่างเช่น, #!/bin/sh WEBSITE="danydiop" /usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > $WEBSITE.sql ฉันต้องเชื่อมต่อ.sqlกับ$WEBSITE

1
เชลล์แบบโต้ตอบสามารถกลายเป็นแบบไม่โต้ตอบหรือในทางกลับกันได้หรือไม่?
เชลล์แบบโต้ตอบสามารถกลายเป็นแบบไม่โต้ตอบหรือในทางกลับกันได้หรือไม่? หมายเหตุ:ผมเคยทำมากของการวิจัยเกี่ยวกับคำถามพื้นฐาน "ความแตกต่างระหว่างการโต้ตอบและไม่โต้ตอบอะไร" และผลการวิจัยของฉันทำให้ฉันถามนี้คำถาม คำถามนี้มีคำนำยาวส่วนหนึ่งเป็นเพราะมันเป็นสิ่งสำคัญสิ่งที่ประเภทของความหมายที่เราใช้สำหรับ "การโต้ตอบ" เพื่อที่จะตอบได้ คำจำกัดความอาจเป็นป้ายกำกับโดยพลการสำหรับบางชุด มันสามารถอธิบายคุณสมบัติต่าง ๆ ; หรืออาจให้ข้อมูลที่คุณสามารถใช้ในการทำนายพฤติกรรมและเข้าใจวัตถุประสงค์ ประเภทสุดท้ายนี้เราสามารถเรียกว่า "นิยามการกระทำ" หรือ "นิยามแบบไดนามิก" และเป็นประโยชน์มากที่สุด ในman 1p shนิยามของเชลล์เชิงโต้ตอบต่อไปนี้จะได้รับ: If the -i option is present, or if there are no operands and the shell’s standard input and standard error are attached to a terminal, the shell is considered to …

1
รอ bash-builtin เบิร์น CPU ที่ 100 เปอร์เซ็นต์
เกิดขึ้นอย่างน้อยในGNU bash รุ่น 4.3.42 x86_64 && GNU bash รุ่น 4.3.11 x86_64 ฉันใช้sleep & wait $!แทนวิธีง่าย ๆsleepในการทำให้sleepสัญญาณขัดจังหวะ(เหมือนSIGUSR1 ) แต่ดูเหมือนว่าwaitbash-builtin จะทำงานในลักษณะที่แปลกเมื่อคุณเรียกใช้สิ่งต่อไปนี้ อาคาร 1: cat <( trap 'echo SIGUSR1' SIGUSR1; echo $BASHPID; while :;do sleep 1 & wait $!; echo test; done )& อาคาร 2: kill -10 /the pid of the subshell, printed …

5
ค้นหาไฟล์ที่มีคำค้นหาหลาย ๆ คำในไฟล์
ฉันกำลังมองหาวิธีที่จะแสดงรายการไฟล์ทั้งหมดในไดเรกทอรีที่มีชุดคำหลักเต็มรูปแบบที่ฉันค้นหาทุกที่ในไฟล์ ดังนั้นคำหลักไม่จำเป็นต้องปรากฏในบรรทัดเดียวกัน วิธีหนึ่งในการทำเช่นนี้คือ: grep -l one $(grep -l two $(grep -l three *)) คำหลักสามคำเป็นเพียงตัวอย่างมันอาจมีสองหรือสี่คำเป็นต้น วิธีที่สองที่ฉันนึกได้คือ: grep -l one * | xargs grep -l two | xargs grep -l three วิธีที่สามที่ปรากฏในคำถามอื่นจะเป็น: find . -type f \ -exec grep -q one {} \; -a \ -exec grep -q two {} \; -a …

2
ปัญหาเกี่ยวกับคำสั่งติดตั้งเพื่อคัดลอกไดเรกทอรีทั้งหมด
ดังนั้นฉันจึงมี repo กับไฟล์ configบางตัวและฉันพยายามสร้าง a makefileเพื่อติดตั้งใน homedir ปัญหาที่ฉันมีคือเมื่อฉันเรียกใช้คำสั่งต่อไปนี้ในทุบตี install -m 755 -d ~/path/to/dotfilesDir/ ~/ ดูเหมือนไม่มีอะไรเกิดขึ้นในขณะที่ install -m 755 ~/path/to/dotfilesDir/{file1,file2,...} ~/ ทำงานตามที่ตั้งใจไว้ ทำไมโซลูชันแรก (ง่ายกว่าและสะอาดกว่า) ไม่ทำงาน

4
bash: adduser: ไม่พบคำสั่งบน centOS
ฉันติดตั้ง CentOS 5.5 บน VMWare 8 ของฉันเมื่อเร็ว ๆ นี้และฉันพยายามเพิ่มผู้ใช้ใหม่ในระบบ ฉันไม่สามารถเพิ่มผู้ใช้ยกเว้นว่าฉันใช้su -ตัวเลือก ฉันเชื่อว่ามันต้องทำอะไรบางอย่างกับเส้นทางที่ไม่ได้ตั้งอย่างถูกต้อง ฉันอัปเดตเส้นทางแล้วและนี่คือสิ่งที่ดูเหมือน /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/uone/bin:/sbin ฉันเชื่อว่าคำสั่งอยู่ใน / sbin dir ซึ่งเป็นส่วนหนึ่งของเส้นทางแล้ว มีใครแนะนำฉันได้บ้างที่ฉันอาจหายไป?
16 shell  path 

5
ทำไมมีหลายเชลล์ในระบบ Unix like?
ฉันเพิ่งเริ่มเรียนรู้พื้นฐานของยูนิกซ์และสงสัยว่าทำไมมีกระสุนจำนวนมากในระบบยูนิกซ์ จากหนังสือการวางโปรแกรมขั้นสูงใน Unix Environment : เชลล์เป็นตัวแปลบรรทัดคำสั่งที่อ่านอินพุตของผู้ใช้และดำเนินการคำสั่งอินพุตของผู้ใช้ไปยังเชลล์โดยปกติจะมาจากเทอร์มินัล (เชลล์เชิงโต้ตอบ) หรือบางครั้งมาจากไฟล์ (เรียกว่าเชลล์สคริปต์) จากนั้นหนังสือก็จะแสดงรายการโปรแกรมเชลล์เช่น Bourne shell, Bourne-again shell, Cshell และอื่น ๆ อีกมากมาย คำถามของฉันนั้นโดยทั่วไปแล้วทำไมเราถึงต้องการเชลล์หลายอัน?
16 shell 

5
วิธีการฝังคำสั่งเชลล์ลงในนิพจน์ sed?
ฉันมีไฟล์ข้อความที่มีรูปแบบต่อไปนี้: keyword value keyword value ... โดยที่ keyword เป็นคำเดียวและความคุ้มค่าเป็นอย่างอื่นจนกระทั่งสิ้นสุดบรรทัด ฉันต้องการอ่านไฟล์จากเชลล์สคริปต์ในวิธีที่ค่า (แต่ไม่ใช่คำหลัก) ได้รับการขยายเชลล์ ด้วยความที่เป็นเรื่องง่ายที่จะจับคู่คำหลักและชิ้นส่วนค่า input=' keyword value value keyword "value value" keyword `uname` ' echo "$input"|sed -e 's/^\([^[:space:]]*\)[[:space:]]\(.*\)$/k=<\1> v=<\2>/' ซึ่งผลิต k=<keyword> v=<value value> k=<keyword> v=<"value value"> k=<keyword> v=<`uname`> แต่คำถามก็คือฉันจะฝังคำสั่งเชลล์ลงในส่วนทดแทนของนิพจน์ sed ได้อย่างไร \1 `echo \2`ในกรณีนี้ผมอยากจะเปลี่ยนให้เป็น
16 shell  sed 

1
การดำเนินการสคริปต์ใน zsh - สิทธิ์ของไฟล์
ฉันสับสนเกี่ยวกับการอนุญาตให้ใช้ไฟล์ไม่ทำงานตามที่คาดไว้ อาจเป็นเพราะความคาดหวังของฉันผิด อย่างไรก็ตาม: ฉันมีไฟล์สคริปต์สำหรับความเรียบง่ายที่เรียกว่าเพียงแค่ตั้งอยู่ในs ~/binเพื่อประโยชน์ของตัวอย่างนี้ไฟล์มีเพียงบรรทัดต่อไปนี้: #!/bin/zsh echo "Test"; ง่ายมาก. ฉันนำทางไปยัง~/binไดเรกทอรีและchmodสิทธิ์ของแฟ้มของsการ400- คืออ่านอย่างเดียวสำหรับฉันเท่านั้น ไม่มีสิทธิ์ดำเนินการ ดังนั้นฉันจึงพยายามรันสคริปต์โดยป้อนเส้นทางของสิ่งนี้: % ./s zsh: permission denied: ./s จนถึงตอนนี้ดีมาก ไม่สามารถเรียกใช้ไฟล์ได้เนื่องจากการอนุญาตที่ไม่ถูกต้อง การกำหนดสิทธิ์การเข้าถึงให้เกิน500(เรียกใช้การอนุญาตที่ได้รับ) จะทำงานได้ดีเช่นกัน - ด้วยการอนุญาตเหล่านี้ไฟล์จะทำงานได้ดี: % ./s Test ทั้งหมดนี้เป็นไปตามที่คาดไว้ แต่ฉันก็chmodอนุญาตให้ย้อนกลับไปที่400(ดำเนินการอนุญาตอีกครั้ง) ลองsourceใช้ไฟล์และสิ่งนี้เกิดขึ้น: % source s Test แม้ว่าสิทธิ์จะเป็น 400สคริปต์จะดำเนินการ ดังนั้นนี่คือคำถามของฉัน: เหตุใดจึง./sล้มเหลว (เช่นควร) แต่source sดำเนินการตามปกติ สิ่งนี้ไม่ได้เป็นการทำลายวัตถุประสงค์ทั้งหมดของการอนุญาตให้ดำเนินการหรือไม่ ใน400สิทธิ์sh sและzsh sยังทำงาน ฉันแน่ใจว่าฉันกำลังทำหรือเข้าใจบางสิ่งผิดปกติอย่างน่ากลัว สามารถชี้คนออกที่ให้ฉันและอธิบายความแตกต่างระหว่าง./s, source s, …

3
เหตุใดปุ่มลูกศรของฉันจึงไม่ทำงาน
ฉันเพิ่งติดตั้ง Ubuntu และเมื่อฉันเรียกใช้ sh บนเทอร์มินัลแป้นลูกศรของฉันไม่ทำงานดังนั้นฉันจึงไม่สามารถผ่านประวัติการโทรหรือแก้ไขสิ่งที่ฉันกำลังพิมพ์ มันก็ออกมาเป็นตัวอักษรแปลก ๆ ^[[Aเช่น เชลล์ล็อกอินเป็นทุบตีและทำงานได้ดี แต่ทันทีที่ฉันเปลี่ยนเป็น SH พวกเขาจะไม่ทำงาน ฉันจะแก้ไขสิ่งนี้ได้อย่างไร
16 shell  ubuntu  terminal 

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