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

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

2
ค้นหา (1): สัญลักษณ์ตัวแทนของดาวมีการใช้งานอย่างไรเพื่อให้ล้มเหลวในชื่อไฟล์บางส่วน
ในระบบไฟล์ที่ชื่อไฟล์อยู่ใน UTF-8 ฉันมีไฟล์ที่มีชื่อผิดพลาด มันจะแสดงเป็น: D�sinstaller, ชื่อจริงตาม zsh D$'\351'sinstaller:, Latin1 สำหรับDésinstaller, ตัวเองป่าเถื่อนฝรั่งเศสสำหรับ "ถอนการติดตั้ง" Zsh จะไม่เข้าคู่กับมัน[[ $file =~ '^.*$' ]]แต่จะจับคู่กับก้อนกลม*- นี่คือพฤติกรรมที่ฉันคาดหวัง ตอนนี้ฉันยังคงคาดหวังว่าจะพบมันเมื่อทำงานfind . -name '*'- ในความเป็นจริงฉันไม่เคยคาดหวังว่าชื่อไฟล์จะล้มเหลวในการทดสอบนี้ อย่างไรก็ตามด้วยLANG=en_US.utf8ไฟล์ไม่ปรากฏขึ้นและฉันต้องตั้งค่าLANG=C(หรือen_USหรือ'') เพื่อให้มันทำงาน คำถาม: การดำเนินการที่อยู่เบื้องหลังคืออะไรและฉันจะคาดการณ์ผลลัพธ์ได้อย่างไร ข้อมูล: Arch Linux 3.14.37-1-lts, find (GNU findutils) 4.4.2

2
“ export var = value” ไม่สามารถใช้ได้ที่ไหน
ฉันหยิบขึ้นมา - อาจจะเป็น Usenet ในช่วงกลางปี ​​1990 (!) - สิ่งก่อสร้างนั้น export var=value เป็น Bashism และการแสดงออกแบบพกพาคือ var=value export var ฉันได้รับการสนับสนุนมาหลายปี แต่เมื่อเร็ว ๆ นี้มีคนท้าทายฉันเกี่ยวกับเรื่องนี้และฉันไม่สามารถหาเอกสารใด ๆ เพื่อสำรองสิ่งที่เคยเป็นความเชื่อที่มั่นคงของฉัน Googling สำหรับ"export: command not found"ดูเหมือนจะไม่เกิดกรณีใด ๆ ที่ใครบางคนมีปัญหานี้จริง ๆ ดังนั้นแม้ว่ามันจะเป็นของแท้ แต่ฉันคิดว่ามันไม่ธรรมดา (ความนิยมที่ฉันได้รับดูเหมือนว่าเป็นมือใหม่ที่คัดลอก / วางเครื่องหมายวรรคตอนและจบลงด้วย'export: command not foundหรือบางส่วนหรือพยายามใช้exportกับsudoและcshผู้ใช้มือใหม่ที่พยายามใช้ไวยากรณ์เชลล์เป้าหมาย) แน่นอนฉันสามารถบอกได้ว่าการทำงานบน OS X และ Linux distros ต่าง ๆ รวมทั้งคนที่เป็นshdash sh$ export …

9
ฉันจะเพิ่ม $ PATH ให้สะอาดได้อย่างไร?
ฉันต้องการวิธีเพิ่มสิ่งต่าง ๆ ใน $ PATH ทั้งระบบหรือสำหรับผู้ใช้รายบุคคลโดยไม่ต้องเพิ่มพา ธ เดียวกันหลาย ๆ ครั้ง เหตุผลหนึ่งที่จะต้องการที่จะทำเช่นนี้คือเพื่อให้ข้อมูลเพิ่มเติมสามารถทำใน.bashrcซึ่งไม่จำเป็นต้องเข้าสู่ระบบและยังเป็นประโยชน์เพิ่มเติมเกี่ยวกับระบบที่ใช้งาน (เช่น) ซึ่งไม่เคยโทรlightdm.profile ฉันรู้คำถามจัดการกับวิธีการที่ซ้ำกันทำความสะอาดจาก $ PATH แต่ฉันไม่ต้องการที่จะลบข้อมูลที่ซ้ำกัน ฉันต้องการวิธีเพิ่มเส้นทางหากไม่มีอยู่แล้วเท่านั้น
31 shell  path 

10
วิธีการเริ่มต้นสคริปต์ Python ใหม่โดยอัตโนมัติหากมีการฆ่าหรือตาย
ฉันกำลังเรียกใช้สคริปต์ Python ของฉันในพื้นหลังในเครื่อง Ubuntu ของฉัน (12.04) เช่นนี้ - nohup python testing.py > test.out & ตอนนี้อาจเป็นไปได้ว่าในบางช่วงของฉันข้างต้นPython scriptสามารถตายด้วยเหตุผลใดก็ตาม ดังนั้นฉันคิดว่าจะมีcron agentสคริปต์เชลล์ bash ซึ่งสามารถรีสตาร์ทสคริปต์ Python ด้านบนของฉันโดยอัตโนมัติหากมันถูกฆ่าด้วยเหตุผลใดก็ตาม เป็นไปได้ที่จะทำ? ถ้าใช่แล้ววิธีที่ดีที่สุดในการแก้ไขปัญหาเหล่านี้คืออะไร UPDATE: หลังจากสร้างtesting.confไฟล์แบบนี้ - chdir /tekooz exec python testing.py respawn ฉันรันคำสั่ง sudo ด้านล่างเพื่อเริ่มต้น แต่ฉันไม่เห็นว่ากระบวนการทำงานโดยใช้ ps ax หรือไม่ root@bx13:/bezook# sudo start testing testing start/running, process 27794 root@bx13:/bezook# ps …
31 bash  shell  cron  python 

3
วิธี distro / shell-agnostic ที่ดีที่สุดในการตั้งค่าตัวแปรสภาพแวดล้อมคืออะไร
คำถามบอกว่ามันทั้งหมด ปัจจุบันฉันใช้ Arch Linux และ zsh แต่ฉันต้องการวิธีแก้ปัญหาที่ (อย่างน้อยที่สุด) ใช้งานได้ทั้งบน VT และใน xterms และ (หวังว่าควรเป็นอย่างยิ่ง) จะยังคงทำงานต่อไปถ้าฉันเปลี่ยน distros หรือ shell ฉันได้ยินว่าคำตอบของคำถามนี้แตกต่างกันอย่างมากในเอกสารของ distros ที่แตกต่างกัน Ubuntu บอกว่า "ใช้. pam_environment" ฉันคิดว่าใน Arch สิ่งที่พวกเขาแนะนำขึ้นอยู่กับเปลือกของคุณ ขณะนี้ฉันใส่ทุกอย่างใน. profileและถ้าเชลล์ไม่ได้แหล่งที่มาด้วยเหตุผลบางอย่าง (เช่นทุบตีถ้า. bash_profile มีอยู่) ฉันจะแทนที่ด้วยการจัดหามันด้วยตนเอง แต่ดูเหมือนว่าจะต้องมีวิธีที่ดีกว่า

4
จะเกิดอะไรขึ้นถ้าคุณแก้ไขสคริปต์ระหว่างการดำเนินการ
ฉันมีคำถามทั่วไปซึ่งอาจเป็นผลมาจากความเข้าใจผิดว่ากระบวนการจัดการใน Linux อย่างไร สำหรับวัตถุประสงค์ของฉันฉันจะกำหนด 'สคริปต์' เป็นตัวอย่างของรหัสทุบตีบันทึกไว้ในไฟล์ข้อความที่มีสิทธิ์ดำเนินการเปิดใช้งานสำหรับผู้ใช้ปัจจุบัน ฉันมีชุดของสคริปต์ที่โทรหากันตามกัน ฉันจะเรียกพวกเขาว่าสคริปต์ A, B และ C. Script A ดำเนินการชุดคำสั่งแล้วหยุดชั่วคราวจากนั้นจะเรียกใช้สคริปต์ B จากนั้นหยุดสคริปต์แล้วเรียกใช้สคริปต์ C ในคำอื่น ๆ ซีรีส์ ขั้นตอนเป็นดังนี้: เรียกใช้สคริปต์ A: ชุดคำสั่ง หยุด เรียกใช้สคริปต์ B หยุด เรียกใช้สคริปต์ C ฉันรู้จากประสบการณ์ว่าถ้าฉันเรียกใช้สคริปต์ A จนกระทั่งหยุดการทำงานชั่วคราวจากนั้นทำการแก้ไขในสคริปต์ B การแก้ไขเหล่านั้นจะสะท้อนให้เห็นในการทำงานของรหัสเมื่อฉันอนุญาตให้ทำงานต่อ ในทำนองเดียวกันถ้าฉันทำการแก้ไขสคริปต์ C ในขณะที่สคริปต์ A ยังคงหยุดชั่วคราวแล้วอนุญาตให้ดำเนินการต่อหลังจากบันทึกการเปลี่ยนแปลงการเปลี่ยนแปลงเหล่านั้นจะสะท้อนให้เห็นในการเรียกใช้โค้ด ต่อไปนี้เป็นคำถามจริงมีวิธีแก้ไขสคริปต์ A ในขณะที่ยังทำงานอยู่หรือไม่ หรือการแก้ไขเป็นไปไม่ได้เมื่อเริ่มดำเนินการ?

9
ฉันจะลบบรรทัดแรกและบรรทัดสุดท้ายของไฟล์โดยใช้คำสั่งเชลล์ได้อย่างไร
ฉันมีไฟล์ชื่อElement_queryที่มีผลลัพธ์ของแบบสอบถาม: SQL> select count (*) from element; [Output of the query which I want to keep in my file] SQL> spool off; ฉันต้องการลบบรรทัดที่ 1 และบรรทัดสุดท้ายโดยใช้คำสั่งเชลล์
31 shell  sed  awk  grep  pipe 

2
grep และหนีเครื่องหมายดอลลาร์
$Id$ฉันต้องการที่จะทราบว่ามีไฟล์สตริง grep \$Id\$ my_dir/mylist_of_files ส่งกลับค่าที่เกิดขึ้น 0 ฉันค้นพบว่าฉันต้องใช้ grep \$Id$ my_dir/mylist_of_files จากนั้นฉันจะเห็นว่า$Idมีสีในเอาต์พุตนั่นคือมันถูกจับคู่ ฉันจะจับคู่ที่สองได้อย่างไร$และทำไมไม่\$Id\$ทำงาน ไม่สำคัญว่าตัวที่สอง$จะเป็นตัวละครตัวสุดท้ายหรือไม่ ฉันใช้grep2.9 ก่อนโพสต์คำถามของฉันฉันใช้ google ... ฉันพบคำตอบ หากต้องการค้นหา $ (เครื่องหมายดอลลาร์) ในไฟล์ชื่อ test2 ให้ป้อน: grep \\ $ test2 จำเป็นต้องใช้อักขระ \\ (double backslash) เพื่อบังคับให้เชลล์ส่ง a \ $ (เครื่องหมายแบ็กสแลชเดี่ยว, เครื่องหมายดอลลาร์) ไปยังคำสั่ง grep อักขระ \ (แบ็กสแลชเดี่ยว) บอกให้คำสั่ง grep ปฏิบัติต่ออักขระต่อไปนี้ (ในตัวอย่างนี้ $) เป็นตัวอักษรมากกว่าอักขระนิพจน์ ใช้คำสั่ง …

3
ฉันจะโยง pgrep กับ kill ได้ไหม
ฉันสังเกตเห็นว่า|ใช้เพื่อส่งผลลัพธ์ของคำสั่งแรกไปยังอีก ฉันต้องการฆ่ากระบวนการทั้งหมดที่ตรงกับชื่อ นี่คือสิ่งที่ pgrep ทำตามปกติ: $ pgrep name 5089 5105 และข้อโต้แย้งหลายประการดูเหมือนจะทำงานกับkill: sudo kill 5089 5105 แต่นี่เป็นสิ่งที่ผิด: pgrep name | kill ดังนั้นจะทำอย่างไรให้ถูกต้อง?
31 shell  pipe  arguments 

1
ทำไมคำสั่ง strings จะไม่หยุด?
stringsพฤติกรรมคำสั่งวิจิตรพิสดารเห็นได้ชัดว่ามันไม่ได้หยุดเขียนไปยังแฟ้มแม้ว่าไดรฟ์วิ่งออกไปจากพื้นที่ หรือบางทีฉันหายไปบางอย่าง ฉันเรียกใช้ต่อไปนี้: # strings /dev/urandom > random.txt สิ่งนี้ยังคงทำงานต่อไปและไม่หยุดแม้หลังจากเติมดิสก์ (แฟลช usb ทั่วไป) ถ้าอย่างนั้นฉันจะสร้าง ramdisk ให้เร็วขึ้นและลองคำสั่งเดิมอีกครั้ง มันยังไม่หยุด ฉันเข้าใจว่าurandomไม่ใช่ไฟล์ปกติและstringsเอาต์พุตของยังถูกเปลี่ยนเส้นทางอย่างไรก็ตามในทั้งสองกรณีข้างต้นcatคำสั่งรายงานข้อผิดพลาดเมื่อไม่มีที่ว่าง # cat /dev/urandom > random.txt cat: write error: No space left on device นี่เป็นพฤติกรรมปกติของสตริงหรือไม่ ถ้าเป็นเช่นนั้นทำไม ข้อมูลจะถูกเขียนที่ไหนหลังจากไม่มีพื้นที่เหลืออีกแล้ว?
30 linux  shell  string 

3
Grep หลากสี
ฉันพยายามเรียกคำสั่ง grep แต่ละคำเพื่อเน้นว่าผลลัพธ์เป็นสีที่ต่างกัน ฉันสามารถทำได้ด้วยตนเองโดยใช้บรรทัดดังนี้: ls -l GREP_COLORS='mt=01;32' grep c | GREP_COLORS='mt=01;31' grep o | GREP_COLORS='mt=01;34' grep n | GREP_COLORS='mt=01;36' grep f cตัวละครทุกตัวจะถูกเน้นด้วยสีเขียวและoตัวละครทุกตัวจะถูกเน้นด้วยสีแดง ฯลฯ ... เพื่อให้ตัวอย่างนี้ทำงานคุณจะต้องแน่ใจว่าคุณมี --color=alwaysคำสั่ง grep อยู่เสมอ ฉันได้ตั้งค่านี้ใน.bashrc grep ของฉันดังนั้นจะมีสี: export GREP_OPTIONS='--color=always' สิ่งที่ฉันพยายามทำให้สำเร็จคือห่อฟังก์ชันนี้ด้วยนามแฝงเพื่อให้ฉันสามารถโทรได้ grepและมีGREP_COLORSค่าที่แตกต่างกันในแต่ละครั้ง ฉันเข้าใจการพิจารณาของเชลล์จำนวนมากสำหรับ grep piped ใหม่แต่ละอันและฉันพยายามทำสิ่งนี้โดยการสร้างไฟล์บางไฟล์ (หนึ่งสำหรับแต่ละสี) เพื่อระบุว่าพวกมันถูกใช้ไปแล้ว ฉันได้พยายามมาบ้างแล้ว แต่ก็แปลกแล้วอันนี้ดูเหมือนจะทำงานได้ดีที่สุด ฉันมีสิ่งนี้ในของฉัน.bashrc : alias mg="mygrep" mygrep(){ # define …
30 bash  shell  grep  pipe  bashrc 

4
มีเชลล์ JavaScript หรือไม่
เมื่อเร็ว ๆ นี้ฉันทำงานกับ JS และฉันก็กระตือรือร้นกับภาษานี้มาก ฉันรู้ว่ามีnode.jsสำหรับรัน JS ที่ฝั่งเซิร์ฟเวอร์ แต่มีเชลล์ที่ใช้ JS เป็นภาษาสคริปต์หรือไม่ หากสิ่งนั้นมีอยู่จริงมันใช้งานได้และมั่นคงอย่างไร?

2
การเปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์ใช้การล็อกไฟล์หรือไม่?
ถ้าฉันมีคำสั่ง $ ./script >> file.log ที่ถูกเรียกสองครั้งเมื่อมีสายที่สองเกิดขึ้นก่อนที่สายแรกจะจบลงจะเกิดอะไรขึ้น การโทรครั้งแรกจะได้รับการล็อคแบบเอกสิทธิ์เฉพาะบุคคลในไฟล์เอาต์พุตหรือไม่? หากเป็นเช่นนั้นสคริปต์ที่สองจะล้มเหลวเมื่อพยายามเขียนหรือเชลล์ยอมรับเอาต์พุต (อนุญาตให้สคริปต์จบ) และส่งข้อผิดพลาดหรือไม่? หรือไฟล์บันทึกถูกเขียนถึงสองครั้งหรือไม่?

5
Shell Script mktemp วิธีที่ดีที่สุดในการสร้าง pipe ที่มีชื่อชั่วคราวคืออะไร?
ฉันทราบดีที่สุดว่าควรสร้างไฟล์ชั่วคราวด้วยmktempแต่จะมีชื่อไพพ์ว่าอย่างไร ฉันชอบสิ่งที่จะเป็นไปตาม POSIX ที่สุดเท่าที่จะทำได้ แต่ Linux เท่านั้นที่ยอมรับได้ หลีกเลี่ยง Bashisms dashเป็นเกณฑ์อย่างหนักของฉันเท่านั้นที่ผมเขียน
30 linux  shell  security  pipe 

3
คำสั่ง ls: บรรทัดแรกมีความหมายว่าอะไร?
เมื่อฉันฉันจะls -lได้รับสิ่งนี้: calico@A000505:~/Documentos$ ls -l total 2020 -rwxr-xr-x 1 calico calico 8559 2010-11-16 11:12 a.out -rwxrw-rw- 1 smt smt 2050138 2010-10-14 10:40 Java2.pdf -rwxrw-rw- 1 ocv ocv 234 2010-11-16 11:11 test.c แต่ "รวม 2020" หมายความว่าอะไร? ฉันมี 3 ไฟล์เท่านั้นดังนั้นจึงไม่ใช่จำนวนไฟล์หรือไดเรกทอรีและฉันเดาว่ามันไม่ได้มีขนาดเท่ากัน แล้วมันคืออะไร
30 shell  ls 

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