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

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

2
คำพูดเดี่ยวในเครื่องหมายคำพูดคู่และคู่มืออ้างอิง Bash
ในส่วน 3.1.2.3 ชื่อ Double Quotes คู่มือ Bash พูดว่า: การใส่อักขระในเครื่องหมายคำพูดคู่ ('"') จะเก็บรักษาค่าตัวอักษรของอักขระทั้งหมดภายในเครื่องหมายคำพูดยกเว้น '$', '`', '\' และเมื่อเปิดใช้งานการขยายประวัติ '!' ในขณะนี้ฉันกังวลกับคำพูดเดียว ( ') เป็นความหมายพิเศษที่อธิบายไว้ในส่วนก่อนหน้าหัวข้อ 3.1.2.2 คือ: การใส่อักขระในเครื่องหมายคำพูดเดี่ยว ( ') จะรักษาค่าตามตัวอักษรของอักขระแต่ละตัวภายในเครื่องหมายคำพูด เครื่องหมายคำพูดเดี่ยวอาจไม่เกิดขึ้นระหว่างเครื่องหมายคำพูดเดี่ยวแม้ว่าจะนำหน้าด้วยเครื่องหมายทับขวา รวมสอง expositions echo "'$a'" โดยที่ตัวแปรaไม่ได้ถูกกำหนด (ดังนั้น$a= สตริงว่าง) ควรพิมพ์$aบนหน้าจอเนื่องจาก''การมีความหมายพิเศษภายในจะป้องกัน$จากการตีความพิเศษ แต่จะพิมพ์''ออกมา ทำไมเป็นเช่นนั้น
18 bash  shell  quoting 

1
“ มนุษย์” คืนค่าหน้าจอเมื่อฉันออกจากโปรแกรมอย่างไร
ถ้าผมเปิดหน้าคนของโปรแกรมเหมือนcatหรือlsจะพิมพ์ (ไม่อาจจะเป็นคำที่เหมาะสม) เนื้อหาของหน้าคนและเมื่อผมกดqมันแสดงให้เห็นหน้าจอเช่นเดียวกับก่อนที่จะกล่าวอ้างmanคำสั่ง การคืนค่าเกิดขึ้นได้อย่างไร อะไรที่ลบทุกอย่างแล้วพิมพ์เนื้อหาก่อนหน้าของเชลล์? ตัวอย่าง: [VAR121@Tesla Testing]$ man ls เอาท์พุท: LS(1) User Commands LS(1) NAME ls - list directory contents SYNOPSIS ls [OPTION]... [FILE]... ............ เมื่อฉันกดqหน้าจอจะกลับไปที่ลักษณะที่ปรากฏเริ่มต้นของเชลล์เช่นพรอมต์ที่แสดงด้านล่าง [VAR121@Tesla Testing]$ man ls [VAR121@Tesla Testing]$ หน้าจอจะคืนค่าอย่างไร
18 bash  shell  terminal  man 

3
วิธีเลื่อนการขยายตัวแปร
ฉันต้องการเริ่มต้นสตริงที่ด้านบนสุดของสคริปต์ด้วยตัวแปรที่ยังไม่ได้ตั้งค่าเช่น: str1='I went to ${PLACE} and saw ${EVENT}' str2='If you do ${ACTION} you will ${RESULT}' และจากนั้นในภายหลังPLACE, EVENT, ACTIONและRESULTจะเป็นชุด ฉันต้องการที่จะสามารถพิมพ์สตริงของฉันออกมาพร้อมกับตัวแปรที่ขยาย ตัวเลือกเดียวของฉันคือevalอะไร? ดูเหมือนว่าจะใช้งานได้: eval "echo ${str1}" มาตรฐานนี้หรือไม่ มีวิธีที่ดีกว่าในการทำเช่นนี้? มันจะดีถ้าไม่ทำงานevalเพราะตัวแปรอาจเป็นอะไรก็ได้
18 bash  shell  string 

5
ฉันจะดำเนินการกับไฟล์ทั้งหมดที่มีนามสกุลเฉพาะในโฟลเดอร์ย่อยอย่างสง่างามได้อย่างไร?
ทางออกที่ดีที่สุดของฉันในปัจจุบันคือ: for i in $(find . -name *.jpg); do echo $i; done ปัญหา: ไม่จัดการช่องว่างในชื่อไฟล์ หมายเหตุ: ฉันจะรักวิธีการทำเช่นนี้กราฟิกเช่นคำสั่ง "ต้นไม้"
18 bash  shell  find 



4
ทำไม grep ไม่ใช้ท่อถึงทำงานที่นี่?
ฉันมีคำสั่งดังต่อไปนี้: find / -name libGL.so.1 ซึ่งส่งคืนบรรทัดจำนวนมากด้วย "การอนุญาตที่ถูกปฏิเสธ" ฉันต้องการยกเว้นบรรทัดดังกล่าวดังนั้นฉันจึงเพิ่มสิ่งต่อไปนี้: find / -name libGL.so.1 | grep -v 'denied' แต่ผลลัพธ์คือเดียวกัน - ฉันไม่ได้กรองบรรทัดที่มีgrep -v 'denied' Permission deniedฉันลองหลายรูปแบบดูบทเรียน grep แต่ฉันไม่สามารถเข้าใจปัญหาได้ ข้อเสนอแนะใด ๆ
18 shell  grep  pipe 

3
ความแตกต่างระหว่าง env, setenv, export และเวลาที่จะใช้คืออะไร?
เมื่อเร็ว ๆ นี้ฉันสังเกตเห็นว่าเรามี 3 ตัวเลือกในการตั้งค่าตัวแปรสภาพแวดล้อม: export envVar1=1 setenv envVar2=2 env envVAr3=3 หากมีวิธีอื่นโปรดบอกเรา เมื่อใดที่ฉันควรเลือกหนึ่งรายการมากกว่ารายการอื่น กรุณาแนะนำแนวทาง ในเรื่องของความเข้ากันได้ของเชลล์ซึ่งครอบคลุมมากที่สุด (ครอบคลุมภาษาของเชลล์มากกว่า) ฉันสังเกตเห็นคำตอบนี้แล้วแต่ฉันต้องการขยายคำถามด้วยenvและแนวทางการตั้งค่าการใช้งาน

5
หลีกเลี่ยงการเรียกใช้สคริปต์หากไม่ได้กำหนดตัวแปร
ฉันมีสคริปต์ดูเหมือนว่า: c=0 for f in */*; do cp -v "$f" "/myhome/CE$(printf '%0*d' 2 $BATCHNUM)-new-stuctures_extracted/test-$(printf '%0*d' 5 $c)" c=$((c=c+1)) done อย่างไรก็ตามผู้ใช้ต้องจัดให้มีการเรียกตัวแปร BATCHNUM และฉันต้องบังคับให้สคริปต์นี้หยุดทำงาน จะดีกว่าถ้าฉันบังคับให้สคริปต์ที่เรียกสคริปต์นี้หยุดทำงานด้วย (หรือแม้แต่ # 1 สคริปต์ที่เรียกใช้สคริปต์ # 2 ซึ่งเรียกสคริปต์นี้)

3
ไม่พบคำสั่งผ่านเชลล์สคริปต์ แต่ทำงานบนเทอร์มินัล
ในไฟล์. sh ของฉันฉันไม่สามารถเรียกคำสั่ง ant หรือ mv หรือ cp ได้ แต่คำสั่งเดียวกันรันบน terminal.below คือสคริปต์ของฉัน ไฟล์ sample.sh #! /bin/sh cp filename.so filename_org.so android update project -p . ant clean ant release เพิ่มเส้นทางในไฟล์. bashrc export PATH=$PATH:/usr/bin/ cp, mv, ant ทำงานได้ภายใต้เทอร์มินัลเท่านั้น
18 shell 

5
แตกต่างกันสำหรับการจัดเก็บไฟล์ที่คล้ายกันสูง?
ที่ทำงานเราทำการถ่ายโอนฐานข้อมูล mysql ของเราทุกคืน จากวันต่อวันฉันจะแขกที่ใกล้ถึง 90-95% ของข้อมูลที่ซ้ำกันเพิ่มขึ้นเมื่อเวลาผ่านไป (Heck ณ จุดนี้บางคนอาจจะ 99%) การทิ้งเหล่านี้เป็นที่หนึ่งบรรทัดคือคำสั่ง mysql INSERT เดียวดังนั้นความแตกต่างเพียงอย่างเดียวคือทั้งบรรทัดและลำดับที่พวกเขาอยู่ในไฟล์ ถ้าฉันจัดเรียงมันความแตกต่างจริงจากไฟล์ต่อไฟล์จะเล็กมาก ฉันค้นหาแล้วและฉันไม่พบวิธีการเรียงลำดับผลลัพธ์ตามดัมพ์ แต่ฉันสามารถส่งผ่านsortคำสั่งได้ จากนั้นจะมีบล็อกยาวที่มีความยาวเหมือนกัน ดังนั้นฉันจึงพยายามหาวิธีที่จะเก็บเฉพาะส่วนต่าง ฉันสามารถเริ่มต้นด้วยการถ่ายโอนข้อมูลหลักและแตกต่างจากนั้นในแต่ละคืน แต่ความแตกต่างจะมีขนาดใหญ่ขึ้นทุกคืน หรือฉันจะทำให้ความแตกต่างซึ่งเป็นรายบุคคลจะเล็กมาก แต่ดูเหมือนว่ามันจะใช้เวลานานในการคำนวณถ้าฉันต้องรวบรวมเจ้านายที่แตกต่างกันของซีรีส์ทั้งหมดในแต่ละคืน เป็นไปได้หรือไม่ ด้วยเครื่องมืออะไร แก้ไขฉันไม่ได้ถามวิธีการสำรองข้อมูล mysql ลืม mysql สักครู่ มันเป็นปลาเฮอริ่งแดง สิ่งที่ฉันอยากรู้คือวิธีการทำชุดของการกลิ้งแตกต่างจากชุดของไฟล์ ทุกคืนเราจะได้รับไฟล์ (ซึ่งเกิดขึ้นเป็นไฟล์ mysqldump ) ที่ 99% คล้ายกับไฟล์ก่อนหน้า ใช่เรา gzip พวกเขาทั้งหมด แต่มันซ้ำซ้อนที่จะมีความซ้ำซ้อนนั้นในตอนแรก สิ่งที่ฉันต้องการจริงๆคือความแตกต่างจากเมื่อคืนก่อน ... ซึ่งเพียง 1% แตกต่างจากเมื่อคืนก่อน ... และอื่น …


2
ความแตกต่างระหว่างคำสั่ง builtin cd และ cd คืออะไร?
builtin cdผมพบคำสั่งลินุกซ์ ความแตกต่างระหว่างคำสั่งbuiltin cdและcdคืออะไร? ที่จริงแล้วฉันได้ทำการวิจัยเกี่ยวกับความแตกต่าง แต่ฉันไม่สามารถหาคำอธิบายที่น่าทึ่งและมีนัยสำคัญเกี่ยวกับเรื่องนี้
17 bash  shell  cd-command 

2
POSIX shell: `$ 'สูญเสียความหมายพิเศษหรือไม่ถ้ามันเป็นตัวอักษรตัวสุดท้ายในคำ?
ที่เถ้าถ่านประและทุบตีเมื่อฉันวิ่ง $ echo ab$ มันกลับมา ab$ พฤติกรรมนี้ถูกระบุโดย POSIX หรือเป็นเพียงการประชุมทั่วไปในเปลือกหอยที่สอดคล้องกับ POSIX หรือไม่ ฉันไม่พบสิ่งใดในหน้าภาษาคำสั่งเชลล์ POSIX ที่กล่าวถึงพฤติกรรมนี้
17 shell  posix 

3
ทำไมรูปแบบการทำงานของ `#!` ไม่ได้รับการระบุโดย POSIX
จากหน้าภาษาคำสั่งเชลล์ของข้อมูลจำเพาะ POSIX: หากบรรทัดแรกของไฟล์คำสั่งเชลล์เริ่มต้นด้วยอักขระ "#!" ผลลัพธ์จะไม่ถูกระบุ ทำไมพฤติกรรมของ#!ไม่ระบุโดย POSIX ฉันพบว่ามันทำให้งงงวยว่าบางสิ่งบางอย่างพกพาและใช้กันอย่างแพร่หลายจะมีพฤติกรรมที่ไม่ระบุ
17 shell  posix  shebang 

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