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

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

4
มีไฟล์สองไฟล์เชื่อมโยงกันหรือไม่?
ฉันจะบอกได้อย่างไรว่าสองไฟล์เชื่อมโยงกันอย่างหนักจากบรรทัดคำสั่ง? เช่นบางสิ่งบางอย่างเชื่อมโยงสิ่งนี้: $ ls fileA fileB fileC $ is-hardlinked fileA fileB yes $ is-hardlinked fileA fileC no
27 shell  files 

8
ยูทิลิตี้ของคำสั่ง: ในเชลล์สคริปต์คืออะไรโดยไม่ได้ทำอะไรเลย?
ในคำตอบสำหรับคำถามนี้เกี่ยวกับความคิดเห็นในการเขียนสคริปต์เชลล์จะมีการระบุว่า:คำสั่ง null เป็นคำสั่งที่ไม่ทำอะไรเลยอย่างชัดเจน (แต่ไม่ควรใช้สำหรับความคิดเห็น) สิ่งที่เป็นประโยชน์ของคำสั่งที่ไม่ทำอะไรเลยอย่างแน่นอน?

12
Linux - คำสั่งเพื่อแสดงรายการไฟล์ (ยกเว้น ls)
ลองนึกภาพคุณกำลังทำงานกับระบบและมีคนลบ lsคำสั่ง ( /bin/ls) โดยไม่ตั้งใจ คุณจะรับรายการไฟล์ในไดเรกทอรีปัจจุบันได้อย่างไร? ลองมัน. ฉันลองวิธีการมากมายและค้นหาบนอินเทอร์เน็ต แต่ก็ไม่มีอะไร ฉันต้องการถามข้างlsคำสั่งว่าเราสามารถใช้คำสั่งอะไรเพื่อแสดงรายการไฟล์ทั้งหมด
27 shell  command-line  ls 

1
พฤติกรรมการเยื้องที่ไม่คาดคิดเมื่อฉันตั้งค่าเทอร์มินัลเป็นโหมดดิบ - เหตุใดจึงเป็นเช่นนี้
ขึ้นอยู่กับสิ่งที่ฉันได้อ่านเมื่อเทอร์มินัลอยู่ในโหมด raw ตัวละครจะไม่ได้รับการประมวลผลโดยไดรเวอร์เทอร์มินัล แต่จะถูกส่งตรง ฉันตั้งค่าเทอร์มินัลในโหมด raw โดยใช้คำสั่งstty rawและสังเกตว่าเอาต์พุตถูกเยื้องไปทางขวาในแต่ละครั้งจนกว่าจะไม่มีที่ว่างอีกต่อไป นี่คือสิ่งที่ฉันหมายถึง: เหตุใดพฤติกรรมนี้จึงเกิดขึ้น!
27 linux  shell  terminal 

4
วิธีรันคำสั่งไลบรารี่จากเชลล์?
ฉันต้องการคำนวณความยาวของสตริง (นั่นคือค่าแฮช) ดังนั้นฉันเปิดเทอร์มินัลและทำสิ่งนี้: $ apropos length ที่ส่งคืนฉันด้วยพวงของคำสั่ง / ฟังก์ชั่นที่มี(3)หรือ(3ssl)ผนวกท้ายของพวกเขา ตอนนี้ผู้ชายคนให้ข้อมูลเกี่ยวกับความsection numbersหมายเหล่านี้ให้เรา 3 Library calls (functions within program libraries) ด้วยความอยากรู้ฉันเพิ่งลองใช้คำสั่งเหล่านี้ทั้งหมด (หวังว่าอย่างน้อยจะใช้ได้) strcspn (3) - get length of a prefix substring strlen (3) - calculate the length of a string strnlen (3) - determine the length of a fixed-size string strspn (3) …
27 shell  libraries 

2
ข้อผิดพลาดในการทดสอบวงเล็บของเชลล์เมื่อสตริงเป็นวงเล็บซ้าย
ฉันเคยมีความมั่นใจเกี่ยวกับความจริงที่ว่าการอ้างถึงสตริงนั้นเป็นวิธีปฏิบัติที่ดีเสมอเพื่อหลีกเลี่ยงการแยกเชลล์ จากนั้นฉันก็เจอสิ่งนี้: $ x='(' $ [ "$x" = '1' -a "$y" = '1' ] bash: [: `)' expected, found 1 พยายามที่จะแยกปัญหาได้รับข้อผิดพลาดเดียวกัน: $ [ '(' = '1' -a '1' = '1' ] bash: [: `)' expected, found 1 ฉันแก้ไขปัญหาเช่นนี้: [ "$x" = '1' ] && [ "$y" = '1' ] ยังฉันต้องรู้ว่าเกิดอะไรขึ้นที่นี่
27 shell  test 

2
ความแตกต่างระหว่าง 'ls' และ 'echo $ (ls)'
พิจารณาตัวอย่างเปลือกสองอัน $ ls myDoc.html SomeDirectory someDoc.txt และ $ echo $(ls) myDoc.html SomeDirectory someDoc.txt ครั้งแรกที่ดำเนินการlsตามที่ฉันเข้าใจผนวกเนื้อหาของไดเรกทอรีการทำงานปัจจุบันไปยังstdoutไฟล์ (ซึ่งเป็นสิ่งที่ terminal แสดง) ถูกต้องหรือไม่ ที่สองใช้ค่าของlsคำสั่ง (ซึ่งหมายความว่าเป็นเนื้อหาของไดเรกทอรีการทำงานปัจจุบัน) และพิมพ์ไปยังstdoutไฟล์ ถูกต้องหรือไม่ ทำไมทั้งสองคำสั่งจึงให้เอาต์พุตที่ต่างกัน?
27 shell 

2
ตรวจสอบความยาวของตัวแปร
ฉันจะตรวจสอบความยาวของตัวแปรที่อ่าน (สคริปต์ของฉันใส่ตัวอักษรได้ไม่เกินห้าตัว) ฉันคิดถึงสิ่งนี้: #!/bin/bash read string check=${#string} echo $check if [ $check -ge 5 ]; then echo "error" ; exit else echo "done" fi จะมีทางออกที่ "สง่างาม" มากขึ้น?
27 bash  shell  string 

4
เชลล์ได้รับอนุญาตให้ออปติไมซ์คำสั่งยุติการใช้งานอย่างไร้ประโยชน์หรือไม่?
หากมีการขอให้เชลล์ดำเนินการคำสั่งที่ไร้ประโยชน์ ( หรือไร้ประโยชน์บางส่วน ) ที่ทราบว่าจะยุติเช่นcat hugeregularfile.txt > /dev/nullมันสามารถข้ามการดำเนินการของคำสั่งนั้น ( หรือดำเนินการเทียบเท่าที่ถูกกว่าพูด touch -a hugeregularfile.txt ) โดยทั่วไปแล้วเชลล์มีลักษณะคล้ายกับคอมไพเลอร์ C ซึ่งมันอาจทำการแปลงใด ๆ ในซอร์สโค้ดตราบใดที่พฤติกรรมที่สังเกตได้จากภายนอกนั้นเหมือนกับถ้าเครื่องนามธรรมประเมินค่าหรือไม่ แก้ไข Nota Bene: คำถามของฉันตามที่โพสต์ในตอนแรกมีชื่อเรื่องที่ถามว่าเชลล์ได้รับอนุญาตให้ทำการปรับแต่งเหล่านี้ได้หรือไม่ ฉันสนใจในทฤษฎีมากกว่าการปฏิบัติแม้ว่าทั้งสองยินดี

4
เหตุใดจึงไม่มีคำสั่ง shell เพื่อสร้างไฟล์
สนใจโปรด: ฉันไม่ได้ถามวิธีการสร้างไฟล์จากบรรทัดคำสั่ง! ฉันใช้touchสำหรับทำไฟล์มาหลายปีโดยไม่สนใจว่าจุดประสงค์หลักของมันคืออย่างอื่น หากต้องการสร้างไฟล์จากบรรทัดคำสั่งมีความเป็นไปได้มากมาย: touch foo.bar > foo.bar cat > foo.bar echo -n > foo.bar printf '' > foo.bar และฉันแน่ใจว่ามีมากขึ้น แต่ความจริงคือไม่มีคำสั่งใด ๆ ข้างต้นที่ได้รับการออกแบบมาเพื่อสร้างไฟล์ ตัวอย่างเช่นman touchแนะนำคำสั่งนี้เพื่อเปลี่ยนการประทับเวลาไฟล์ ทำไมระบบปฏิบัติการถึงไม่สมบูรณ์เหมือน Unix (หรือ Linux) มีคำสั่งที่ออกแบบมาเพื่อสร้างไฟล์

6
เหตุใดฉันจึงไม่สามารถเปลี่ยนเส้นทางชื่อผลลัพธ์จากคำสั่งเดียวไปยัง“ cd” ได้
ฉันพยายามรับcdชื่อไดเรกทอรีที่เปลี่ยนเส้นทางจากคำสั่งอื่น วิธีการเหล่านี้ไม่ทำงาน: $ echo $HOME | cd $ echo $HOME | xargs cd วิธีนี้ใช้ได้ผล: $ cd $(echo $HOME) ทำไมชุดคำสั่งแรกไม่ทำงานและมีคำสั่งอื่นที่ล้มเหลวด้วยหรือไม่

4
จะระบุตัวอักษรโดยใช้รหัสเลขฐานสิบหกใน `grep 'ได้อย่างไร
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Unix & Linux Stack Exchange อพยพ 8 ปีที่ผ่านมา ฉันใช้คำสั่งต่อไปนี้เพื่อตั้งค่าช่วงอักขระ grep สำหรับรหัสเลขฐานสิบหก 0900 (แทนअ) ถึง 097F (แทนव) ฉันจะใช้รหัสเลขฐานสิบหกแทนअและवได้อย่างไร bzcat archive.bz2 | grep -v '<[अ-व]*\s' | tr '[:punct:][:blank:][:digit:]' '\n' | uniq | grep -o '^[अ-व]*$' | sort -f | uniq -c | sort -nr | head -50000 | …

3
ฉันจะจับเวลาท่อได้อย่างไร
ฉันต้องการtimeคำสั่งที่ประกอบด้วยคำสั่งสองคำสั่งแยกกันโดยมีหนึ่ง piping output ไปยังอีกคำสั่งหนึ่ง ตัวอย่างเช่นพิจารณาสองสคริปต์ด้านล่าง: $ cat foo.sh #!/bin/sh sleep 4 $ cat bar.sh #!/bin/sh sleep 2 ตอนนี้ฉันtimeจะรายงานเวลาที่ใช้ไปได้อย่างไรfoo.sh | bar.sh(และใช่ฉันรู้แล้วว่าไพพ์ไม่มีความหมายที่นี่ แต่นี่เป็นเพียงตัวอย่าง) มันทำงานได้อย่างที่คาดไว้ถ้าฉันใช้มันต่อเนื่องใน subshell โดยไม่ต้อง piping: $ time ( foo.sh; bar.sh ) real 0m6.020s user 0m0.010s sys 0m0.003s แต่ฉันไม่สามารถทำให้มันทำงานได้เมื่อ piping: $ time ( foo.sh | bar.sh ) real 0m4.009s user 0m0.007s …
27 bash  shell  pipe  time 

2
ตัวแปรสภาพแวดล้อม TERM จะเริ่มต้นที่ใด
เมื่อเปิดหน้าต่าง terminal กับจำลอง GNOME xtermร์มินัลในเดสก์ท็กุยเปลือกสภาพแวดล้อมการลงทุนค่าเริ่มต้นของตัวแปรค่า หากฉันใช้CTL+ ALT+ F1เพื่อสลับไปยังหน้าต่างคอนโซล TTY และค่าที่มีการตั้งค่าecho $TERMlinux แรงจูงใจในการถามของฉันคือภายใน~/.bashrcตัวแปรของฉันมีการใช้ตัวแปรเพื่อพิจารณาว่ามีการจัดให้มีเปลือกสีหรือขาวดำแบบเก่าที่ดี # set a fancy prompt (non-color, unless we know we "want" color) case "$TERM" in xterm-color) color_prompt=yes;; esac ในทั้งคอนโซลเชลล์และเชลล์จำลองของ Gnome Terminal หากฉันพิมพ์ export TERM=xterm-color source /.bashrc กระสุนทั้งสองเปลี่ยนเป็นโหมดสี (สิ่งที่ฉันต้องการให้เกิดขึ้นเสมอในทั้งสอง) TERMกรุณาตั้งค่าเริ่มต้นไว้ที่ไหนและที่ไหนดีที่สุดในการเปลี่ยนค่าเริ่มต้นหากเป็นไปได้? ดูเหมือนจะไม่มีอะไรใน GUI ตัวจำลองเทอร์มินัลเพื่อเลือกหรือตั้งค่า TERM เริ่มต้น ฉันได้พิจารณาเพียงแค่เพิ่มบรรทัดexport TERM=xterm-colorลงที่ด้านบนของ~/.bashrcไฟล์ของฉันแต่สัญชาตญาณของฉันบอกว่านี่ไม่ใช่ทางออกที่ดีที่สุดและการค้นหา Google ของฉันยังไม่ได้นำฉันไปสู่คำตอบที่ดี …

3
วิธี echo `single quote` เมื่อใช้ single quote เพื่อห่ออักขระพิเศษใน shell?
ฉันกำลังอ่านบทเรียนเกี่ยวกับเชลล์วันนี้จากhttp://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htm ซึ่งกล่าวถึง: หากการเสนอราคาเดียวปรากฏขึ้นภายในสตริงที่จะส่งออกคุณไม่ควรใส่สตริงทั้งหมดภายในเครื่องหมายคำพูดเดียวแทนคุณจะต้องนำการ backslash () ดังต่อไปนี้: echo 'It\'s Shell Programming' ฉันลองสิ่งนี้บนเซิร์ฟเวอร์ centos ของฉันมันไม่ทำงานขอ>ให้ฉันพิมพ์อีกมาก ผมสงสัยว่าตั้งแต่สองราคาเดียวเปลี่ยนทุกตัวอักษรพิเศษเป็นตัวอักษรปกติซึ่งรวมถึงสัญลักษณ์หลบหนี\แต่ไม่รวมตัวเอง', วิธีการที่ฉันควรจะเป็นตัวแทนคำพูดเดียวเดียว'ในวลีเดียวที่ยกมา?
26 shell  quoting 

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