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

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

9
วิธีแบ่งเทอร์มินัลออกเป็น "มุมมอง" มากกว่าหนึ่งรายการ?
จากviหากคุณออกคำสั่ง:spหน้าจอจะแบ่งเป็นสอง "มุมมอง" ซึ่งอนุญาตให้คุณแก้ไขมากกว่าหนึ่งไฟล์จากเทอร์มินัลเดียวกัน ในบรรทัดเดียวกันนั้นมีวิธีที่จะเปิดเชลล์หลายอันในเทอร์มินัลเดียวกันหรือไม่?

21
การทำให้เทอร์มินัลและสภาวะแวดล้อมเชลล์ของคุณเป็นสี?
ฉันใช้เวลาส่วนใหญ่ทำงานกับสภาพแวดล้อม Unix และใช้โปรแกรมจำลองเทอร์มินัล ฉันพยายามใช้สีบนบรรทัดคำสั่งเนื่องจากสีทำให้การแสดงผลมีประโยชน์และใช้งานง่ายขึ้น มีตัวเลือกอะไรบ้างเพื่อเพิ่มสีให้กับสภาพแวดล้อมของเทอร์มินัล เทคนิคอะไรที่คุณใช้ คุณพบข้อผิดพลาดอะไรบ้าง น่าเสียดายที่การรองรับสีอาจแตกต่างกันไปตามประเภทของเทอร์มินัลการตั้งค่า TERM ยูทิลิตี้การใช้งานบั๊กกี้ ฯลฯ นี่คือเคล็ดลับบางอย่างจากการตั้งค่าของฉันหลังจากการทดลองมากมาย: ฉันมักจะตั้งค่าTERM=xterm-colorซึ่งได้รับการสนับสนุนในโฮสต์ส่วนใหญ่ (แต่ไม่ทั้งหมด) ฉันทำงานกับโฮสต์ที่แตกต่างกันหลายเวอร์ชันระบบปฏิบัติการที่แตกต่างกัน ฯลฯ ฉันใช้ทุกอย่างจาก macOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux และ FreeBSD ฉันพยายามทำให้สิ่งต่าง ๆ เรียบง่ายและเป็นสามัญถ้าเป็นไปได้ ฉันทำงานกลุ่มโดยใช้ GNU screenซึ่งเพิ่มความสนุกอีกชั้น ระบบปฏิบัติการจำนวนมากตั้งค่าสิ่งต่าง ๆ เช่นdircolorsและโดยค่าเริ่มต้นและฉันไม่ต้องการแก้ไขสิ่งนี้บนโฮสต์ที่แตกต่างกันหลายร้อยแห่ง ดังนั้นฉันจึงพยายามที่จะยึดติดกับค่าเริ่มต้น ฉันปรับแต่งค่าสีของเทอร์มินัลแทน ใช้สีสำหรับบางคำสั่ง Unix ( ls, grep, less, vim) และพรอมต์ทุบตี คำสั่งเหล่านี้ดูเหมือนจะใช้ " …
262 shell  bash  colors  prompt 

4
วิธีรับ pid ของคำสั่งที่ดำเนินการครั้งสุดท้ายในเชลล์สคริปต์?
ฉันต้องการมีเชลล์สคริปต์เช่นนี้: my-app & echo $my-app-pid แต่ฉันไม่ทราบวิธีการรับ pid ของคำสั่งที่ดำเนินการเพียง ฉันรู้ว่าฉันสามารถใช้jobs -p my-appคำสั่งเพื่อ grep pid แต่ถ้าฉันต้องการรันเชลล์หลาย ๆ ครั้งวิธีนี้จะไม่ทำงาน เพราะjobspecไม่ชัดเจน


3
ตัวควบคุมและการเปลี่ยนเส้นทางของเชลล์คืออะไร
ฉันมักจะเห็นบทเรียนออนไลน์ที่เชื่อมต่อคำสั่งต่าง ๆ ด้วยสัญลักษณ์ที่แตกต่างกัน ตัวอย่างเช่น: command1 | command2 command1 & command2 command1 || command2 command1 && command2 คนอื่น ๆ ดูเหมือนจะเชื่อมต่อคำสั่งกับไฟล์: command1 > file1 command1 >> file1 สิ่งเหล่านี้คืออะไร พวกเขาเรียกว่าอะไร พวกเขาทำอะไร? มีอะไรอีกบ้าง? Meta หัวข้อเกี่ยวกับคำถามนี้ .

6
อะไรคือความแตกต่างระหว่างโอเปอเรเตอร์ Bash [[vs [vs (vs (vs))
ฉันสับสนเล็กน้อยเกี่ยวกับสิ่งที่ตัวดำเนินการเหล่านี้ทำแตกต่างกันเมื่อใช้ในการทุบตี [[ , [ , ( , (( ฉันเคยเห็นคนใช้พวกเขาถ้างบเช่นนี้: if [[condition]] if [condition] if ((condition)) if (condition)
245 bash  shell  test 

8
ฉันจะทดสอบได้อย่างไรว่าตัวแปรว่างเปล่าหรือมีช่องว่างเท่านั้น?
ไวยากรณ์ bash ต่อไปนี้ตรวจสอบว่าparamไม่ว่างเปล่า: [[ ! -z $param ]] ตัวอย่างเช่น: param="" [[ ! -z $param ]] && echo "I am not zero" ไม่มีการส่งออกและปรับ แต่เมื่อparamว่างเปล่ายกเว้นอักขระเว้นวรรคหนึ่งตัว (ขึ้นไป) เคสจะแตกต่างกัน: param=" " # one space [[ ! -z $param ]] && echo "I am not zero" เอาท์พุท "ฉันไม่ได้เป็นศูนย์" ฉันจะเปลี่ยนการทดสอบเพื่อพิจารณาตัวแปรที่มีอักขระเว้นวรรคว่างเปล่าได้อย่างไร

6
จะไปยังไดเรกทอรีการทำงานก่อนหน้าในเทอร์มินัลได้อย่างไร
ในเทอร์มินัลฉันจะกำหนดคีย์เพื่อไปยังไดเรกทอรีก่อนหน้าซึ่งฉันอยู่เมื่อเปลี่ยนไดเรกทอรีด้วยcdคำสั่งได้อย่างไร ตัวอย่างเช่น/opt/soft/binฉันcdเข้า/etc/squid3และเข้าและฉันต้องการกลับไปที่ไดเรกทอรีแรก
213 shell  cd-command 

3
ผลกระทบด้านความปลอดภัยของการลืมอ้างตัวแปรในเชลล์ bash / POSIX
หากคุณได้ติดตาม unix.stackexchange.com มาระยะหนึ่งแล้วคุณควรจะรู้ว่าตอนนี้การปล่อยตัวแปรที่ไม่ได้ระบุไว้ในบริบทรายการ (ดังในecho $var) ใน Bourne / POSIX shells (zsh เป็นข้อยกเว้น) มีความหมายพิเศษมากและ ไม่ควรทำจนกว่าคุณจะมีเหตุผลที่ดี มันกล่าวถึงในระยะในจำนวนของ Q & A นี่ (ตัวอย่าง: ทำไมไม่เชลล์สคริปต์สำลักของฉันในช่องว่างหรืออักขระพิเศษอื่น ๆ , เมื่อสองครั้ง quoting จำเป็น? , การขยายตัวของตัวแปรเปลือกและผลของ glob และแยกกับมัน , ที่ยกมา vs การขยายสตริงที่ไม่ได้กล่าวถึง) เป็นเช่นนี้มาตั้งแต่การเปิดตัว Bourne shell ในช่วงปลายยุค 70 และไม่ได้ถูกเปลี่ยนแปลงโดย Korn shell (หนึ่งในความเสียใจที่ยิ่งใหญ่ที่สุดของDavid Korn (คำถาม # 7) ) หรือbashที่คัดลอก Korn …

8
ทำไม * ไม่ * แยก `ls '(และจะทำอะไรแทน)
ฉันเห็นคำตอบที่อ้างถึงลิงก์นี้อย่างสม่ำเสมอโดยระบุอย่างชัดเจนว่า"อย่าแยกวิเคราะห์ls" เรื่องนี้ทำให้ฉันรำคาญด้วยเหตุผลสองประการ: ดูเหมือนว่าข้อมูลในลิงก์นั้นได้รับการยอมรับโดยขายส่งด้วยคำถามเล็กน้อย แต่ฉันสามารถเลือกข้อผิดพลาดอย่างน้อยสองสามข้อในการอ่านแบบไม่เป็นทางการ ดูเหมือนว่าปัญหาที่ระบุไว้ในลิงค์นั้นไม่ได้ก่อให้เกิดความปรารถนาที่จะหาทางแก้ไข จากย่อหน้าแรก: ... เมื่อคุณขอ[ls]รายการไฟล์มีปัญหาใหญ่: Unix อนุญาตให้ตัวละครเกือบทุกตัวในชื่อไฟล์รวมถึงช่องว่าง, newlines, จุลภาค, สัญลักษณ์ท่อและสิ่งอื่น ๆ ที่คุณเคยลองใช้เป็น ตัวคั่นยกเว้น NUL ... lsแยกชื่อไฟล์ด้วยการขึ้นบรรทัดใหม่ สิ่งนี้ใช้ได้จนกว่าคุณจะมีไฟล์ที่มีการขึ้นบรรทัดใหม่ในชื่อ และเนื่องจากผมไม่ทราบว่าการดำเนินการใด ๆlsที่ช่วยให้คุณสามารถที่จะยุติชื่อไฟล์ที่มีตัวอักษร NUL lsแทนการขึ้นบรรทัดใหม่นี้จะทำให้เราไม่สามารถที่จะได้รับรายชื่อของชื่อไฟล์ได้อย่างปลอดภัยด้วย คนเกียจคร้านใช่มั้ย วิธีที่เคยเราสามารถจัดการกับการขึ้นบรรทัดใหม่ยกเลิกชุดจดทะเบียนสำหรับข้อมูลที่อาจมีการขึ้นบรรทัดใหม่? ถ้าคนที่ตอบคำถามในเว็บไซต์นี้ไม่ได้ทำสิ่งนี้ทุกวันฉันอาจคิดว่าเรากำลังมีปัญหา ความจริงก็คือlsการใช้งานส่วนใหญ่ให้ api ที่ง่ายมากสำหรับการแยกวิเคราะห์ผลลัพธ์ของพวกเขาและเราทุกคนได้ทำมันมาตลอดโดยไม่ได้ตระหนักถึงมัน ไม่เพียง แต่คุณสามารถจบชื่อไฟล์ด้วย null คุณสามารถเริ่มต้นด้วย null ได้เช่นกันหรือกับสตริงอื่น ๆ ที่คุณอาจต้องการ มีอะไรมากกว่าที่คุณสามารถกำหนดสตริงพลเหล่านี้ต่อไฟล์ชนิด โปรดพิจารณา: LS_COLORS='lc=\0:rc=:ec=\0\0\0:fi=:di=:' ls -l --color=always | cat -A total 4$ drwxr-xr-x …
204 shell  ls 

7
วิธีลบบรรทัดเดียวออกจากประวัติ
ฉันทำงานใน Mac OSX ดังนั้นฉันเดาว่าฉันใช้ทุบตี ... ? บางครั้งฉันป้อนบางสิ่งที่ฉันไม่ต้องการให้จดจำในประวัติศาสตร์ ฉันจะลบออกได้อย่างไร

4
เหตุใดการใช้เชลล์ลูปเพื่อประมวลผลข้อความจึงถือว่าไม่ดี?
การใช้วนลูปในการประมวลผลข้อความโดยทั่วไปถือว่าเป็นแนวปฏิบัติที่ไม่ดีในเชลล์ POSIX หรือไม่ ในฐานะที่เป็นStéphane Chazelas ชี้ให้เห็นบางส่วนของสาเหตุของการไม่ได้ใช้ห่วงเปลือกความคิด , ความน่าเชื่อถือ , ความสวย , ประสิทธิภาพการทำงานและการรักษาความปลอดภัย คำตอบนี้อธิบายถึงความน่าเชื่อถือและแง่มุมที่ชัดเจน : while IFS= read -r line <&3; do printf '%s\n' "$line" done 3< "$InputFile" สำหรับผลการดำเนินงานที่whileห่วงและอ่านช้าอย่างมากเมื่ออ่านจากไฟล์หรือท่อเพราะอ่านเปลือกในตัวอ่านตัวละครตัวหนึ่งที่เวลา ด้านแนวคิดและความปลอดภัยเป็นอย่างไร?


20
ฉันจะรับชื่อการแจกจ่ายและหมายเลขรุ่นในเชลล์สคริปต์อย่างง่ายได้อย่างไร
ฉันทำงานกับสคริปต์ทุบตีง่าย ๆ ที่ควรจะสามารถทำงานบน Ubuntu และ CentOS ดิสทริบิวชั่น (รองรับ Debian และ Fedora / RHEL จะเป็นข้อดี) และฉันจำเป็นต้องรู้ชื่อและเวอร์ชั่นของการแจกจ่ายที่สคริปต์กำลังทำงานอยู่ ( เพื่อที่จะทริกเกอร์การกระทำที่เฉพาะเจาะจงเช่นการสร้างคลังเก็บ) จนถึงสิ่งที่ฉันได้รับคือ: OS=$(awk '/DISTRIB_ID=/' /etc/*-release | sed 's/DISTRIB_ID=//' | tr '[:upper:]' '[:lower:]') ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/') VERSION=$(awk '/DISTRIB_RELEASE=/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | sed 's/[.]0/./') if [ -z "$OS" ]; then OS=$(awk '{print …
191 shell 

20
วิธีการเพิ่มบรรทัดใหม่ในตอนท้ายของไฟล์?
No newline at end of fileโดยใช้ระบบการควบคุมรุ่นที่ฉันได้รับรำคาญที่เสียงเมื่อต่างกล่าวว่า ดังนั้นฉันสงสัยว่า: วิธีเพิ่มบรรทัดใหม่ที่ท้ายไฟล์เพื่อกำจัดข้อความเหล่านั้นได้อย่างไร

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