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

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

4
dirname และ basename เทียบกับการขยายพารามิเตอร์
มีเหตุผลใดที่จะชอบอีกรูปแบบหนึ่งหรือไม่ ประสิทธิภาพความน่าเชื่อถือความสะดวกในการพกพา? filename=/some/long/path/to/a_file parentdir_v1="${filename%/*}" parentdir_v2="$(dirname "$filename")" basename_v1="${filename##*/}" basename_v2="$(basename "$filename")" echo "$parentdir_v1" echo "$parentdir_v2" echo "$basename_v1" echo "$basename_v2" ผลิต: /some/long/path/to /some/long/path/to a_file a_file (v1 ใช้การขยายพารามิเตอร์เชลล์ v2 ใช้ไบนารีภายนอก)

3
ls pip เท่ากับ ls -1 หรือไม่
lsคืนค่าเอาต์พุตในหลาย ๆ คอลัมน์ในขณะที่ls|catคืนค่าเอาต์พุตแบบเหมือนไบต์ด้วยls -1สำหรับไดเรกทอรีที่ฉันได้ลอง ฉันยังคงเห็นประปาในคำตอบเช่นls -1 ls -1|wc -lมีเหตุผลที่จะชอบls -1ไหม? ทำไมไม่...|catเปลี่ยนการส่งออกของls?
19 shell  ls 

1
echo [9876543210] แสดง 1 4 5 6 …ทำไม?
โปรดอธิบายว่าทำไม 1 4 5 6 แสดงเป็นคำสั่ง echo สี่ครั้งล่าสุด ฉันตีมันโดยบังเอิญครั้งเดียว แต่ตอนนี้ฉันอยากรู้ว่าทำไมพฤติกรรมนี้เกิดขึ้น ข้อความเหล่านี้ทำงานได้ตามที่คาดไว้ (สำหรับฉัน) $ echo [ 9876543210 ] [ 9876543210 ] $ echo [237890] [237890] ข้อความสะท้อนเหล่านี้แสดงอย่างต่อเนื่อง 1 4 5 6. มีอะไรพิเศษเกี่ยวกับตัวเลขเหล่านี้หรือไม่? $ echo [9876543210] 1 4 5 6 $ echo [abcd9876543210ghi] 1 4 5 6 $ echo [-123456-] 1 4 5 …

7
สีและเรื่องตลกแบบสุ่มในเชลล์ / เทอร์มินัล
ฉันเห็นคนที่ใช้เทอร์มินัลของพวกเขามันเป็นเรื่องตลกและเปลี่ยนสีและหัวเราะกับผู้ใช้ มันพูดอะไรบางอย่างตามแนวของสีที่รั่วเข้าไปในคอนโซลตั้งแต่ (ปี) ฉันจำไม่ได้ว่ามันคืออะไร แต่ฉันต้องการใช้เพราะ Kubuntu Konsole น่าเบื่อมากหลังจากใช้งานมานานหลายชั่วโมงและฉันต้องการทำให้มันมีชีวิตชีวาขึ้นมาหน่อย ความคิดใด ๆ เกี่ยวกับมันคืออะไร / ฉันจะหาได้ที่ไหน สิ่งที่ฉันกำลังมองหาคือสิ่งที่ทำโดยอัตโนมัติโดยไม่ต้องป้อนข้อมูลจากผู้ใช้เพื่อเรียกใช้สคริปต์หรือคำสั่ง (หรือแม้แต่คำสั่งที่เรียกใช้เมื่อเริ่มต้น) สิ่งที่ฉันกำลังมองหาเปลี่ยนชุดรูปแบบสีของเปลือกหอยในช่วงเวลาสุ่มและล้อเล่นเกี่ยวกับการเปลี่ยนสี บางทีมันอาจเป็นเพียงโปรแกรมเทอร์มินัลอื่น (ฉันไม่รู้ว่านี่เป็นคำที่ถูกต้องหรือไม่) กว่า Konsole ที่สร้างไว้ใน Kubuntu

5
รูทเชลล์เปลี่ยนแปลงผิดพลาด ฉันจะเปลี่ยนกลับไปเป็นเปลือกที่ถูกต้องได้อย่างไร
ฉันป้อนผิดพลาด chsh -s /usr/bin แทน chsh -s /bin/bash และตอนนี้ฉันไม่สามารถเข้าสู่รูทเชลล์ฉันจะเริ่มเชลล์ bash ในฐานะรูทด้วยตนเองได้อย่างไร
19 bash  shell 

4
ทำไมเชลล์บางตัว `read` builtin ไม่สามารถอ่านบรรทัดทั้งหมดจากไฟล์ใน` / proc` ได้?
ในเชลล์คล้ายบอร์นบางตัวบิวอินreadไม่สามารถอ่านทั้งบรรทัดจากไฟล์ใน/proc(คำสั่งด้านล่างควรจะรันzshแทนที่$=shellด้วย$shellเชลล์อื่น ๆ ): $ for shell in bash dash ksh mksh yash zsh schily-sh heirloom-sh "busybox sh"; do printf '[%s]\n' "$shell" $=shell -c 'IFS= read x </proc/sys/fs/file-max; echo "$x"' done [bash] 602160 [dash] 6 [ksh] 602160 [mksh] 6 [yash] 6 [zsh] 6 [schily-sh] 602160 [heirloom-sh] 602160 [busybox sh] 6 readมาตรฐานต้องการอินพุตมาตรฐานต้องเป็นไฟล์ข้อความข้อกำหนดนั้นเป็นสาเหตุของพฤติกรรมที่หลากหลายใช่หรือไม่ …
19 linux  shell  proc  read 


5
คำสั่งเพื่อเรียนรู้เกี่ยวกับระบบที่ไม่คุ้นเคย [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว คุณล็อกอินเข้าสู่ระบบ UNIX หรือ Linux ที่ไม่คุ้นเคย (ในฐานะรูท) คำสั่งใดที่คุณใช้เพื่อปรับทิศทางตัวเองและค้นหาว่าคุณใช้ระบบประเภทใด คุณจะทราบได้อย่างไรว่าฮาร์ดแวร์ชนิดใดที่ใช้งานอยู่ระบบปฏิบัติการชนิดใดที่กำลังทำงานอยู่และสถานการณ์ปัจจุบันที่เกี่ยวกับการอนุญาตและความปลอดภัย คำสั่งแรกและคำสั่งที่สองที่คุณพิมพ์คืออะไร

5
เหตุใดจึงต้องใช้ diff / patch เมื่อง่ายต่อการใช้ cp
diff -u file1.txt file2.txt > patchfile สร้างไฟล์แพตช์ซึ่งประกอบด้วยคำสั่งสำหรับpatchการแปลง file1.txt ให้เหมือนกับ file2.txt ไม่สามารถใช้cpคำสั่งแทนได้หรือไม่ ฉันสามารถจินตนาการว่านี่จะเป็นประโยชน์เมื่อไฟล์มีขนาดใหญ่เกินไปและต้องถูกถ่ายโอนผ่านเครือข่ายซึ่งวิธีการนี้อาจช่วยประหยัดแบนด์วิดท์ มีวิธีอื่นในการใช้ diff / patch ซึ่งจะเป็นประโยชน์ในสถานการณ์อื่น ๆ หรือไม่?
19 shell  cp  diff  patch 

3
เมื่อฉัน cd ผ่าน symlink ทำไม pwd แสดง symlink แทนที่จะเป็นเส้นทางจริง
ฉันสร้างการเชื่อมโยงนุ่ม ( ln -s 1 2) ไปยังไดเรกทอรีที่อยู่ภายในที่testไดเรกทอรีและเปิดการเชื่อมโยงนุ่ม ( cd 2) pwdและแสดงเส้นทางปัจจุบันใช้ เส้นทางที่แสดงเป็นและไม่ได้~/test/2~/test/1 มันแตกต่างกันใน OS เช่น Windows ทางลัดนำเราไปสู่ไดเรกทอรีจริง ฉันสับสนเล็กน้อยว่าซอฟต์ลิงค์นี้ทำงานอย่างไรใน Linux มันไม่ใช่ทางลัดWindowsใช่มั้ย เป็นเส้นทางที่ทำไมไม่~/test/1? $ mkdir test $ cd test $ mkdir 1 $ ln -s 1 2 $ cd 2 $ pwd /home/dazz/test/2

4
ฉันจะใช้การไหลเวียนของข้อมูลแบบวงกลมในคำสั่งที่เชื่อมต่อระหว่างกันได้อย่างไร
ฉันรู้ว่ามีสองประเภทวิธีที่คำสั่งสามารถเชื่อมต่อซึ่งกันและกัน: โดยใช้ Pipe (วาง std-output ลงใน std-input ของคำสั่งถัดไป) โดยใช้ Tee (แบ่งเอาต์พุตเป็นเอาต์พุตจำนวนมาก) ฉันไม่ทราบว่านั่นคือทั้งหมดที่เป็นไปได้หรือไม่ดังนั้นฉันวาดประเภทการเชื่อมต่อสมมุติ: เป็นไปได้อย่างไรที่จะใช้การไหลเวียนของข้อมูลระหว่างคำสั่งเช่นในรหัสเทียมนี้ซึ่งฉันใช้ตัวแปรแทนคำสั่ง: pseudo-code: a = 1 # start condition repeat { b = tripple(a) c = sin(b) a = c + 1 }

9
การใช้ "ในขณะที่จริง" เพื่อให้สคริปต์มีชีวิตอยู่เป็นความคิดที่ดี?
ฉันแค่กระโดดเข้าสู่ยูนิกซ์จากโลกที่แตกต่างและอยากรู้ว่า while true do /someperlscript.pl done สคริปต์ perl ภายในมีโฟลเดอร์ / ตัวเฝ้าดูไฟล์ที่ดำเนินการเมื่อไฟล์ถูกเปลี่ยนในตำแหน่งเป้าหมาย นี่while trueเป็นความคิดที่ดีหรือไม่? ถ้าไม่เป็นวิธีการที่แข็งแกร่งที่ต้องการคืออะไร? TIA แก้ไข: เนื่องจากสิ่งนี้ดูเหมือนว่าจะสร้างความสนใจพอสมควรนี่เป็นสถานการณ์ที่สมบูรณ์ สคริปต์ perl ตัวเองดูไดเรกทอรีโดยใช้ตัวตรวจสอบไฟล์ เมื่อได้รับไฟล์ใหม่ (พวกเขามาถึงทาง rsync) มันจะรับไฟล์ใหม่และดำเนินการ ตอนนี้ไฟล์ที่เข้ามาอาจเสียหาย (อย่าถาม .. มาจาก raspberry pi) และบางครั้งกระบวนการอาจไม่สามารถจัดการกับมันได้ ฉันไม่รู้ว่าทำไมเพราะเรายังไม่ได้ตระหนักถึงสถานการณ์ทั้งหมด แต่ - หากกระบวนการล้มเหลวด้วยเหตุผลบางอย่างเราต้องการให้มันทำงานและจัดการกับไฟล์ถัดไปเพราะไฟล์ถัดไปไม่เกี่ยวข้องอย่างสมบูรณ์กับไฟล์ก่อนหน้าซึ่งอาจทำให้เกิดข้อผิดพลาด โดยปกติฉันจะใช้การจับบางอย่างและห่อโค้ดทั้งหมดไว้รอบ ๆ เพื่อไม่ให้เกิดปัญหา แต่ก็ไม่แน่ใจเรื่อง Perl จากสิ่งที่ฉันเข้าใจการใช้สิ่งต่าง ๆ เช่น supervisord เป็นวิธีการที่ดีสำหรับสิ่งนี้
19 shell  perl 

5
ทำไมบางครั้งฉันถูกถามซ้ำ ๆ ด้วย“>” ในเครื่อง
เอาล่ะเมื่อฉันรันคำสั่งบางอย่างในทางที่ผิด (สะกดผิด ฯลฯ ) เทอร์มินัลจะแสดงผลลัพธ์ดังนี้: >แทนที่จะเป็นcomputername:workingfolder username$และเมื่อฉันพิมพ์ให้ป้อนมันจะเป็นดังนี้: > > > ถ้าฉันกด Enter 3 ครั้ง

4
วิธีกำหนดค่าที่มีช่องว่างให้กับตัวแปรใน bash โดยใช้ eval
evalฉันต้องการที่จะแบบไดนามิกค่ากำหนดตัวแปรโดยใช้ ตัวอย่างตัวอย่างต่อไปนี้ใช้งานได้: var_name="fruit" var_value="orange" eval $(echo $var_name=$var_value) echo $fruit orange อย่างไรก็ตามเมื่อค่าตัวแปรมีช่องว่างevalส่งคืนข้อผิดพลาดแม้ว่า$var_valueจะอยู่ระหว่างเครื่องหมายคำพูดคู่: var_name="fruit" var_value="blue orange" eval $(echo $var_name="$var_value") bash: orange : command not found วิธีใดที่จะหลีกเลี่ยงสิ่งนี้
19 bash  shell  quoting 

18
จะอ่านที่อยู่ IP ย้อนหลังได้อย่างไร
หากเรามีสตริงนี้ ( ที่อยู่ IP ):192.168.1.1 ฉันจะได้รับ ( แบบฟอร์มการบันทึก DNS ย้อนกลับ ) จากสายนี้ดังนั้นมันจะปรากฏเช่น1.1.168.192.in-addr.arpaใช้เปลือกสคริปต์?

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