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

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

3
ฉันสามารถสร้างไดเรกทอรีสาธารณะภายใต้ไดเรกทอรีส่วนตัวได้หรือไม่
ฉันมีโฟลเดอร์ส่วนบุคคล / a / b บนเซิร์ฟเวอร์ที่มีสิทธิ์ 700 ฉันไม่ต้องการให้ผู้อื่นแสดงรายการเนื้อหาใน / a / b เจ้าของ / a เป็นรูท ตอนนี้ฉันต้องเปิดสิทธิเต็มรูปแบบของไดเรกทอรี / a / b / c ให้กับผู้ใช้ทั้งหมด ฉันเปลี่ยนการอนุญาตของ / a / b / c เป็น 777 แต่ก็ยังไม่สามารถเข้าถึงได้สำหรับผู้อื่น

5
ค้นหาไฟล์ที่ผู้ใช้สามารถเขียนได้อย่างมีประสิทธิภาพด้วยการสร้างกระบวนการน้อยที่สุด
ฉันรูต ฉันต้องการทราบว่าผู้ใช้ที่ไม่ใช่รูทมีสิทธิ์ในการเขียนไฟล์บางไฟล์หรือไม่ - หลายพันไฟล์ จะทำอย่างมีประสิทธิภาพในขณะที่หลีกเลี่ยงการสร้างกระบวนการได้อย่างไร

9
มีบางอย่างเช่น lorem ipsum generator หรือไม่?
มีบางอย่างเช่น ' lorem ipsum generator' หรือไม่? ฉันรู้ว่ามันมีอยู่ในลาเท็กซ์และแม้กระทั่งใน LibreOffice แต่ฉันกำลังมองหาคำสั่งเทอร์มินัล ฉันต้องการพิมพ์บางอย่างเช่นloremipsum 10 >> file1.txtที่จะให้ฉัน 10 ย่อหน้าแรกของ lorem ipsum แต่ละย่อหน้าลงท้ายด้วยหนึ่งตัวอักษร LF และ 1 เส้นสีขาวที่ว่างเปล่าระหว่างแต่ละ paragaph และผลลัพธ์จะถูกเปลี่ยนเส้นทางไปยังไฟล์ชื่อ file1.txt ในไดเรกทอรีปัจจุบัน
20 shell  terminal  text 


6
Unix shell มีความเสถียรเพียงใด“ stdin / stdout APIs”?
grepping, awking, sedding และ piping เป็นกิจวัตรประจำวันของผู้ใช้ระบบปฏิบัติการที่คล้าย Unix อาจอยู่ในบรรทัดคำสั่งหรือภายในเชลล์สคริปต์ (เรียกรวมกันว่าตัวกรองจากนี้เป็นต้นไป) ที่สำคัญเมื่อทำงานกับโปรแกรม "มาตรฐาน" Unix CLI และเชลล์บิวด์อิน (เรียกรวมกันว่าคำสั่งต่อจากนี้ไป) ตัวกรองต้องการรูปแบบที่คาดหวังอย่างแม่นยำสำหรับ stdin, stdout และ stderr ในแต่ละขั้นตอนของตัวกรองเพื่อให้ทำงานได้อย่างถูกต้อง ฉันเรียกรูปแบบที่คาดหวังนี้ของคำสั่งบางอย่างว่า API ของคำสั่งนี้มีดังต่อไปนี้ ในฐานะที่เป็นคนที่มีพื้นฐานการพัฒนาเว็บฉันเปรียบเทียบการรวบรวมข้อมูลและการประมวลผลข้อมูลทางเทคนิคกับการขูดเว็บซึ่งเป็นเทคนิคที่ไม่แน่นอนมากเมื่อใดก็ตามที่มีการเปลี่ยนแปลงเล็กน้อยในการนำเสนอข้อมูล คำถามของฉันตอนนี้เกี่ยวข้องกับความมั่นคงของ Unix APIs คำสั่ง คำสั่งในระบบปฏิบัติการแบบ Unix ทำตามมาตรฐานอย่างเป็นทางการที่เกี่ยวข้องกับอินพุตและเอาต์พุตหรือไม่? มีกรณีในประวัติศาสตร์ที่มีการปรับปรุงคำสั่งที่สำคัญบางอย่างทำให้การทำงานของตัวกรองบางตัวที่สร้างขึ้นโดยใช้คำสั่งรุ่นเก่ากว่านั้นเสียหายหรือไม่ มีคำสั่ง Unix ที่สุกเมื่อเวลาผ่านไปซึ่งเป็นไปไม่ได้ที่จะเปลี่ยนแปลงอย่างที่ตัวกรองบางตัวสามารถแตกได้หรือไม่? ในกรณีที่ตัวกรองอาจแตกเป็นครั้งคราวเนื่องจากการเปลี่ยนคำสั่ง APIs ฉันจะเป็นนักพัฒนาป้องกันตัวกรองจากปัญหานี้ได้อย่างไร

1
เชลล์ใดที่ใช้กับระบบยูนิกซ์ยุคแรก?
ตามวิกิพีเดียบอร์นเชลล์ถูกเปิดตัวในปี 1977 และ C เชลล์ในปี 1978 แต่ยูนิกซ์นั้นมีอายุย้อนไปถึงปี 1969 ถ้าคุณใช้ระบบยูนิกซ์ก่อนปี 1977 คุณจะใช้เชลล์ตัวไหนอยู่?

4
เปลี่ยนชื่อไฟล์จำนวนมาก (หรือแสดงอย่างถูกต้อง) ด้วยอักขระพิเศษ
ฉันมีกลุ่มไดเรกทอรีและไดเรกทอรีย่อยที่มีไฟล์ที่มีอักขระพิเศษเช่นไฟล์นี้: robbie@phil:~$ ls test�sktest.txt test?sktest.txt ค้นหาพบลำดับการหลบหนี: robbie@phil:~$ find test�sktest.txt -ls 424512 4000 -rwxr--r-x 1 robbie robbie 4091743 Jan 26 00:34 test\323sktest.txt เหตุผลเดียวที่ฉันสามารถพิมพ์ชื่อของพวกเขาบนคอนโซลได้ก็เพราะความสมบูรณ์ของแท็บ นอกจากนี้ยังหมายความว่าฉันสามารถเปลี่ยนชื่อพวกเขาด้วยตนเอง (และตัดอักขระพิเศษ) ฉันได้ตั้งค่า LC_ALL เป็น UTF-8 ซึ่งดูเหมือนจะไม่ช่วย (ยังไม่ได้อยู่ในเปลือกใหม่): robbie@phil:~$ echo $LC_ALL en_US.UTF-8 ฉันกำลังเชื่อมต่อกับเครื่องโดยใช้ ssh จาก mac ของฉัน มันคือการติดตั้ง Ubuntu: robbie@phil:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=7.10 DISTRIB_CODENAME=gutsy DISTRIB_DESCRIPTION="Ubuntu 7.10" Shell …

3
มีข้อเสียของการตั้งค่า 'noclobber' หรือไม่?
รับที่zshสามารถอุดตันไฟล์ทั้งหมดที่ได้รับคำสั่ง: >* ฉันคิดว่าการตั้งค่าตัวเลือกnoclobberจะเป็นความคิดที่ดี ฉันสามารถใช้งานได้ตลอดเวลา>| fileหากฉันต้องการใช้พฤติกรรมการปิดบังเริ่มต้นทั้งใน bash และ zsh (zsh ยังอนุญาตให้ใช้ไวยากรณ์ทางเลือก>!file) ฉันคาดว่าnoclobberจะไม่ได้รับการตั้งค่าเริ่มต้นเนื่องจากความเข้ากันได้ POSIX แต่เพื่อให้แน่ใจว่า: มีข้อเสียในการตั้งค่าnoclobberหรือไม่? อย่างไรก็ตามมีการตั้งค่าnoclobberสำหรับเชลล์แบบโต้ตอบเท่านั้นหรือไม่
20 bash  shell  zsh 

3
ทำไม 'echo --help' ไม่ให้หน้าช่วยเหลือของ echo?
ฉันลอง 'man echo' ใน Bash และบอกฉันว่า 'echo --help' จะแสดงความช่วยเหลือจากนั้นก็ออกและในทำนองเดียวกัน 'echo --version' จะออกเวอร์ชั่นและออก แต่ทำไมมันไม่ทำงาน 'echo --help' เพียงพิมพ์ '--help' อย่างแท้จริง
20 bash  shell  echo 

4
เส้นทาง shebangs อิสระ
ฉันมีสคริปต์ที่ฉันต้องการให้สามารถทำงานในสองเครื่อง เครื่องทั้งสองนี้รับสำเนาของสคริปต์จากที่เก็บ git เดียวกัน สคริปต์ต้องทำงานด้วยล่ามที่ถูกต้อง (เช่นzsh) น่าเสียดายที่ทั้งคู่ envและzshอาศัยอยู่ในสถานที่ต่าง ๆ ในเครื่องท้องถิ่นและระยะไกล: เครื่องรีโมต $ which env /bin/env $ which zsh /some/long/path/to/the/right/zsh เครื่องท้องถิ่น $ which env /usr/bin/env $which zsh /usr/local/bin/zsh ฉันสามารถตั้งค่า shebang เพื่อให้การทำงานสคริปต์ที่เป็น/path/to/script.shมักจะใช้Zshในที่มีอยู่PATH?
20 shell  zsh  cron  path 

3
หลีกเลี่ยงลำดับด้วย "echo -e" ในกระสุนที่แตกต่างกัน
ฉันเพิ่งสังเกตเห็นว่าดูเหมือนว่าแฟล็ก-eไม่มีอยู่สำหรับechoคำสั่งในเชลล์ของฉันบน Linux นี่เป็นเพียงการตั้งค่าที่สับสนหรือเป็น "ปกติ" หรือไม่ ตัวอย่างรหัสบางส่วน: #!/bin/sh echo -e "\e[3;12r\e[3H" พิมพ์: -e \e[3;12r\e[3H ก่อนหน้านี้ทำงานได้! ฉันเดาว่าsttyคำสั่งบางอย่างผิดพลาดไปอย่างมากและตอนนี้มันไม่ทำงานอีกต่อไป ใครบางคนบอกว่าฉันเป็นจริงเพียงshbash

2
การตั้งค่าตัวแปรเชลล์ในแบบรวมศูนย์เป็นโมฆะ
ฉันชอบ "null coalescing" จริง ๆ ซึ่งคุณสามารถตั้งค่าตัวแปรเป็นค่า "ไม่ใช่ null" ครั้งแรกในรายการของสิ่งต่าง ๆ หลายภาษารองรับสิ่งนี้เช่น: ค#: String myStr = string1 ?? string2 ?? "default"; JavaScript: var myStr = string1 || string2 || "default"; ... ฯลฯ ฉันแค่อยากรู้ว่าสิ่งนี้สามารถทำได้ใน Bash เพื่อตั้งค่าตัวแปรหรือไม่? หลอก: MY_STR=$ENV{VAR_NAME}??$ANOTHER_VAR??"default";
20 bash  shell  variable 

3
จดชวเลขเพื่อป้อนเนื้อหาของไฟล์หลาย ๆ ไฟล์ไปยัง stdin ของสคริปต์
สมมติว่าฉันมีสคริปต์ที่เรียกscriptว่าอ่านstdinและแยกผลลัพธ์ไปที่หน้าจอ ถ้าฉันต้องการที่จะเลี้ยงเนื้อหาของไฟล์เดียวฉันจะพิมพ์: $ ./script < file1.txt แต่ถ้าฉันต้องการป้อนเนื้อหาของไฟล์หลาย ๆ ไฟล์ลงในสคริปต์ด้วยวิธีเดียวกันมันจะเป็นไปได้หรือไม่? สิ่งที่ดีที่สุดที่ฉันเคยได้รับคือ: cat file1.txt file2.txt > combined.txt && ./script < combined.txt ซึ่งใช้สองคำสั่งและสร้างไฟล์ชั่วคราว มีวิธีการทำสิ่งเดียวกัน แต่ข้ามการสร้างไฟล์รวม?

3
การเปรียบเทียบจำนวนเต็ม: การแสดงออกทางคณิตศาสตร์หรือการแสดงออกตามเงื่อนไข
ใน Bash คุณสามารถเปรียบเทียบจำนวนเต็มสองจำนวนได้โดยใช้นิพจน์เงื่อนไข arg1 OP arg2 OP เป็นหนึ่ง-eq, -ne, -lt, -le, หรือ-gt -geตัวดำเนินการเลขคณิตเหล่านี้จะคืนค่าจริงถ้าarg1เท่ากับ, ไม่เท่ากับ, น้อยกว่า, น้อยกว่าหรือเท่ากับ, มากกว่าหรือมากกว่าหรือเท่ากับarg2ตามลำดับ Arg1และarg2อาจเป็นจำนวนเต็มบวกหรือลบ หรือการแสดงออกทางคณิตศาสตร์: <= >= < > การเปรียบเทียบ == != ความเสมอภาคและความไม่เท่าเทียม ทำไมเรามีสองวิธีที่แตกต่างกันในการเปรียบเทียบจำนวนเต็มสองตัว? จะใช้เมื่อใด ตัวอย่างเช่น[[ 3 -lt 2 ]]ใช้นิพจน์เงื่อนไขและ(( 3 < 2 ))ใช้นิพจน์ทางคณิตศาสตร์ ทั้งคู่คืนค่า 0 เมื่อการเปรียบเทียบเป็นจริง เมื่อเปรียบเทียบจำนวนเต็มสองจำนวนทั้งสองวิธีสามารถใช้แทนกันได้หรือไม่ ถ้าใช่ทำไม Bash มีสองวิธีมากกว่าหนึ่ง?


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