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

คำว่า 'เชลล์' หมายถึงคลาสทั่วไปของล่ามคำสั่งแบบโต้ตอบตามข้อความซึ่งส่วนใหญ่มักเกี่ยวข้องกับระบบปฏิบัติการ Unix & Linux สำหรับคำถามเกี่ยวกับการเขียนสคริปต์เชลล์โปรดใช้แท็กเฉพาะเพิ่มเติมเช่น 'bash', 'powershell' หรือ 'ksh' หากไม่มีแท็กเฉพาะควรใช้วิธีแก้ปัญหาแบบพกพา (POSIX-compliant) แม้ว่าจะใช้ 'posix' เพิ่มเติมหรือ 'sh' แทนก็ตาม

8
วิธีการแยกหนึ่งสายออกเป็นหลายสายโดยคั่นด้วยช่องว่างอย่างน้อยหนึ่งช่องในเปลือกหอย
ฉันมีสตริงที่มีหลายคำอย่างน้อยหนึ่งช่องว่างระหว่างแต่ละสอง ฉันจะแยกสตริงออกเป็นแต่ละคำเพื่อให้สามารถวนซ้ำได้อย่างไร สตริงถูกส่งเป็นอาร์กิวเมนต์ ${2} == "cat cat file"เช่น ฉันจะวนซ้ำมันได้อย่างไร นอกจากนี้ฉันจะตรวจสอบว่าสตริงมีช่องว่างได้อย่างไร
224 bash  shell  string  split 

18
คุณสะท้อนอักขระ Unicode 4 หลักใน Bash ได้อย่างไร
ฉันต้องการเพิ่มกะโหลก Unicode และ crossbones ใน shell prompt ของฉัน (โดยเฉพาะ 'SKULL AND CROSSBONES' (U + 2620)) แต่ฉันไม่สามารถหาคาถาเวทมนต์เพื่อสะท้อนเสียงคายหรือสิ่งอื่นใด อักขระ Unicode 4 หลัก หนึ่งหลักสองหลักนั้นง่าย ตัวอย่างเช่น echo -e "\ x55", นอกจากคำตอบด้านล่างนี้แล้วควรสังเกตว่าเทอร์มินัลของคุณต้องรองรับ Unicode เพื่อให้ได้ผลลัพธ์ตามที่คุณคาดหวัง gnome-terminal ทำงานได้ดีในเรื่องนี้ แต่ไม่จำเป็นต้องเปิดใช้งานตามค่าเริ่มต้น ในแอป Terminal ของ macOS ไปที่การตั้งค่า -> การเข้ารหัสและเลือก Unicode (UTF-8)

22
ตรวจสอบว่ามีการติดตั้งแพกเกจ apt-get หรือไม่จากนั้นติดตั้งหากไม่ได้อยู่ใน Linux
ฉันกำลังทำงานกับระบบ Ubuntu และในปัจจุบันนี่คือสิ่งที่ฉันทำ: if ! which command > /dev/null; then echo -e "Command not found! Install? (y/n) \c" read if "$REPLY" = "y"; then sudo apt-get install command fi fi นี่คือสิ่งที่คนส่วนใหญ่จะทำ? หรือมีวิธีการแก้ปัญหาที่สง่างามมากขึ้น?
223 bash  shell  apt-get 

7
ฉันจะแสดงรายการฟังก์ชั่นที่กำหนดไว้ในเปลือกของฉันได้อย่างไร
ฉันสามารถพิมพ์นามแฝงเพื่อแสดงรายการชื่อแทนทั้งหมด แต่สำหรับฟังก์ชั่นทั้งหมดที่ฉันสามารถทำได้คือ grep .bash_profileของฉัน ที่ได้รับเฉพาะคนในไฟล์นั้นไม่ใช่สิ่งที่กำหนดไว้ในไฟล์ย่อยหรือแบบไดนามิก มีวิธีที่สะดวกกว่าในการค้นหาว่าฟังก์ชั่นใดบ้างที่ถูกกำหนดไว้ในปัจจุบัน?
223 bash  shell  function  unix 

8
ลบสองตัวแปรใน Bash
ฉันมีสคริปต์ด้านล่างเพื่อลบจำนวนไฟล์ระหว่างสองไดเรกทอรี แต่การCOUNT=แสดงออกไม่ทำงาน ไวยากรณ์ที่ถูกต้องคืออะไร? #!/usr/bin/env bash FIRSTV=`ls -1 | wc -l` cd .. SECONDV=`ls -1 | wc -l` COUNT=expr $FIRSTV-$SECONDV ## -> gives 'command not found' error echo $COUNT
220 bash  shell  unix 

19
วิธีแก้ไขลิงก์สัญลักษณ์ในเชลล์สคริปต์
กำหนดเส้นทางแบบสัมบูรณ์หรือสัมพัทธ์ (ในระบบเหมือน Unix) ฉันต้องการกำหนดเส้นทางแบบเต็มของเป้าหมายหลังจากแก้ไข symlink ระดับกลางใด ๆ คะแนนโบนัสสำหรับการแก้ไข ~ เครื่องหมายของชื่อผู้ใช้ในเวลาเดียวกัน หากเป้าหมายคือไดเรกทอรีอาจเป็นไปได้ที่จะ chdir () ลงในไดเรกทอรีแล้วเรียกใช้ getcwd () แต่ฉันต้องการทำสิ่งนี้จากเชลล์สคริปต์แทนที่จะเขียนตัวช่วย C น่าเสียดายที่ shells มีแนวโน้มที่จะพยายามซ่อนการมี symlink จากผู้ใช้ (นี่คือ bash บน OS X): $ ls -ld foo bar drwxr-xr-x 2 greg greg 68 Aug 11 22:36 bar lrwxr-xr-x 1 greg greg 3 Aug 11 22:36 …
220 bash  shell  scripting  symlink 


10
จะใช้ตัวเลือก '-prune' ของ 'find' in sh ได้อย่างไร?
ฉันไม่เข้าใจตัวอย่างที่ได้รับจากman findใครทุกคนสามารถยกตัวอย่างและคำอธิบายให้ฉันได้บ้าง ฉันสามารถรวมการแสดงออกปกติในนั้นได้หรือไม่? คำถามที่มีรายละเอียดมากขึ้นเป็นเช่นนี้: เขียนเชลล์สคริปต์changeallซึ่งมีอินเตอร์เฟสเหมือนchangeall [-r|-R] "string1" "string2"กัน ก็จะพบไฟล์ทั้งหมดที่มีคำต่อท้ายของ.h, .C, .ccหรือ.cppและการเปลี่ยนแปลงที่เกิดขึ้นทั้งหมดให้กับstring1 เป็นตัวเลือกสำหรับการพักใน dir ปัจจุบันเท่านั้นหรือรวมถึง subdir'sstring2-r บันทึก: สำหรับกรณีที่ไม่ซ้ำlsไม่ได้รับอนุญาตเท่านั้นที่เราสามารถใช้และfindsed ฉันพยายามแล้วfind -depthแต่ไม่รองรับ นั่นเป็นเหตุผลที่ผมสงสัยว่าถ้า-pruneจะช่วย man findแต่ไม่เข้าใจตัวอย่างจาก แก้ไข 2: ฉันทำงานที่ได้รับมอบหมายฉันไม่ได้ถามคำถามอย่างละเอียดเพราะฉันต้องการทำมันให้เสร็จ ตั้งแต่ฉันทำไปแล้วส่งตอนนี้ฉันสามารถตอบคำถามทั้งหมดได้ นอกจากนี้ฉันจัดการจนเสร็จสิ้นการมอบหมายโดยไม่ใช้-pruneแต่ต้องการเรียนรู้ต่อไป
219 regex  shell  find  manual 

5
วิธีการดำเนินการ grep ในไฟล์ทั้งหมดในไดเรกทอรี
ทำงานกับ xenserver และฉันต้องการดำเนินการคำสั่งในแต่ละไฟล์ที่อยู่ในไดเรกทอรีทำให้สิ่งต่าง ๆ ออกมาจากคำสั่งและต่อท้ายมันลงในไฟล์ ฉันชัดเจนในคำสั่งที่ฉันต้องการใช้และวิธีการ grep out สตริงตามที่ต้องการ แต่สิ่งที่ฉันไม่ชัดเจนคือฉันจะใช้คำสั่งนี้กับแต่ละไฟล์ได้อย่างไรไปยังไฟล์ถัดไปจนกระทั่งไม่พบไฟล์เพิ่มเติม
219 linux  shell  grep 

8
แสดงเอาต์พุต curl ในรูปแบบ JSON ที่อ่านได้ใน Unix shell script
ในสคริปต์ Unix shell ของฉันเมื่อฉันรันคำสั่ง curl ผลลัพธ์จะปรากฏดังด้านล่างซึ่งฉันเปลี่ยนเส้นทางไปยังไฟล์: {"type":"Show","id":"123","title":"name","description":"Funny","channelTitle":"ifood.tv","lastUpdateTimestamp":"2014-04-20T20:34:59","numOfVideos":"15"} แต่ฉันต้องการเอาท์พุทนี้ไปวางในรูปแบบ JSON ที่อ่านได้ด้านล่างในไฟล์: {"type":"Show", "id":"123", "title":"name", "description":"Funny", "channelTitle":"ifood.tv", "lastUpdateTimestamp":"2014-04-20T20:34:59", "numOfVideos":"15"} ฉันจะจัดรูปแบบผลลัพธ์ด้วยวิธีนี้ได้อย่างไร
215 json  shell  curl 

16
วิธีที่เหมาะสมในการทดสอบว่าพารามิเตอร์ว่างเปล่าในไฟล์แบตช์คืออะไร?
ฉันต้องการทดสอบว่ามีการตั้งค่าตัวแปรหรือไม่ ฉันได้พยายามใช้เทคนิคหลายอย่าง แต่พวกเขาดูเหมือนจะล้มเหลวเมื่อใดก็ตามที่%1ถูกล้อมรอบด้วยคำพูดเช่นกรณีที่เป็น%1"c:\some path with spaces" IF NOT %1 GOTO MyLabel // This is invalid syntax IF "%1" == "" GOTO MyLabel // Works unless %1 has double quotes which fatally kills bat execution IF %1 == GOTO MyLabel // Gives an unexpected GOTO error. ตามเว็บไซต์นี้เป็นIFประเภทไวยากรณ์ที่รองรับ ดังนั้นฉันไม่เห็นวิธีที่จะทำ IF [NOT] ERRORLEVEL …
213 windows  shell  batch-file  cmd 

10
การแทนที่ตัวแปรสภาพแวดล้อมใน sed
หากฉันรันคำสั่งเหล่านี้จากสคริปต์: #my.sh PWD=bla sed 's/xxx/'$PWD'/' ... $ ./my.sh xxx bla ไม่เป็นไร แต่ถ้าฉันวิ่ง: #my.sh sed 's/xxx/'$PWD'/' ... $ ./my.sh $ sed: -e expression #1, char 8: Unknown option to `s' ฉันอ่านในบทช่วยสอนเกี่ยวกับการแทนที่ตัวแปรสภาพแวดล้อมจากเชลล์คุณต้องหยุดและ 'ออกใบเสนอราคา' $varnameส่วนนั้นเพื่อไม่ให้ถูกแทนที่โดยตรงซึ่งเป็นสิ่งที่ฉันทำและจะใช้ได้ผลก็ต่อเมื่อมีการกำหนดตัวแปรไว้ก่อน ฉันจะทำให้ sed รับรู้ a $varเป็นตัวแปรสภาพแวดล้อมตามที่กำหนดไว้ในเชลล์ได้อย่างไร
213 linux  unix  shell  sed 

4
การเรียงลำดับข้อมูลตามคอลัมน์ที่สองของไฟล์
ฉันมีไฟล์สองคอลัมน์และ nจำนวนแถว คอลัมน์ 1 มีnamesและ agecolumn2 ฉันต้องการเรียงลำดับเนื้อหาของไฟล์นี้ตามลำดับจากน้อยไปหามาก age (ในคอลัมน์ที่สอง) ผลลัพธ์ควรแสดงถึงnameบุคคลที่อายุน้อยที่สุดพร้อมด้วยnameและจากนั้นเป็นบุคคลที่อายุน้อยที่สุดที่สองเป็นต้น ... คำแนะนำสำหรับเปลือกซับหนึ่งหรือสคริปต์ทุบตี
212 bash  shell  unix 

10
การส่งคืนบูลีนจากฟังก์ชัน Bash
ฉันต้องการเขียนฟังก์ชั่นทุบตีที่ตรวจสอบว่าไฟล์มีคุณสมบัติบางอย่างและส่งกลับจริงหรือเท็จ จากนั้นฉันสามารถใช้มันในสคริปต์ของฉันใน "ถ้า" แต่สิ่งที่ฉันควรกลับมา? function myfun(){ ... return 0; else return 1; fi;} จากนั้นฉันใช้มันเช่นนี้ if myfun filename.txt; then ... แน่นอนว่ามันไม่ได้ผล สิ่งนี้จะสำเร็จได้อย่างไร
211 bash  shell  boolean 

22
วิธีคัดลอกไฟล์ไปยังหลายไดเรกทอรีโดยใช้คำสั่ง gnu cp
เป็นไปได้หรือไม่ที่จะคัดลอกไฟล์เดียวไปยังหลายไดเรกทอรีโดยใช้คำสั่ง cp? ฉันลองสิ่งต่อไปนี้ซึ่งใช้งานไม่ได้: cp file1 /foo/ /bar/ cp file1 {/foo/,/bar} ฉันรู้ว่ามันเป็นไปได้โดยใช้ for loop หรือ find แต่มันเป็นไปได้โดยใช้คำสั่ง gnu cp?
210 linux  bash  shell 

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