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

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

15
Unzip ไฟล์ทั้งหมดในไดเรกทอรี
ฉันมีไดเรกทอรีไฟล์ ZIP (สร้างขึ้นในเครื่อง Windows) ฉันสามารถคลายซิปด้วยตนเองโดยใช้unzip filenameแต่ฉันจะแตกไฟล์ ZIP ทั้งหมดในโฟลเดอร์ปัจจุบันผ่านเชลล์ได้อย่างไร? ใช้เซิร์ฟเวอร์ Linux Ubuntu
203 linux  shell  wildcard  unzip 

6
คำสั่งเพื่อเปลี่ยนโฮมไดเร็กทอรีเริ่มต้นของผู้ใช้
ฉันต้องการที่จะรู้ว่ามีคำสั่งเปลือกง่าย ๆ ในการเปลี่ยนไดเรกทอรีบ้านของผู้ใช้ใน Linux / Unix (หนึ่งคล้ายกับchshซึ่งเปลี่ยนเปลือกเข้าสู่ระบบเริ่มต้นของผู้ใช้ที่ถูกต้องที่มีอยู่) โดยไม่ต้องสัมผัส/etc/passwdไฟล์ ขอบคุณ
202 linux  shell  unix 

3
วิธีการ gzip ไฟล์ทั้งหมดในไดเรกทอรีย่อยทั้งหมดเป็นไฟล์บีบอัดหนึ่งในทุบตี
ซ้ำเป็นไปได้: gzipping ชุดไดเรกทอรีและสร้างไฟล์บีบอัด tar โพสต์นี้อธิบายถึงวิธีการ gzip แต่ละไฟล์ภายในโครงสร้างไดเรกทอรี อย่างไรก็ตามฉันต้องทำสิ่งที่แตกต่างออกไปเล็กน้อย ฉันต้องการผลิตไฟล์ gzip ขนาดใหญ่หนึ่งไฟล์สำหรับไฟล์ทั้งหมดภายใต้ไดเรกทอรีที่แน่นอน ฉันยังต้องสามารถระบุชื่อไฟล์ที่ส่งออกสำหรับไฟล์บีบอัด (เช่น files.gz) และเขียนทับไฟล์ไฟล์บีบอัดเก่าหากมีอยู่แล้ว
201 linux  bash  shell  gzip 

11
ทำซ้ำรายการไฟล์ที่มีช่องว่าง
ฉันต้องการย้ำเหนือรายการไฟล์ รายการนี้เป็นผลลัพธ์ของfindคำสั่งดังนั้นฉันมาด้วย: getlist() { for f in $(find . -iname "foo*") do echo "File found: $f" # do something useful done } ไม่เป็นไรยกเว้นไฟล์ที่มีช่องว่างในชื่อ: $ ls foo_bar_baz.txt foo bar baz.txt $ getlist File found: foo_bar_baz.txt File found: foo File found: bar File found: baz.txt ฉันจะทำอย่างไรเพื่อหลีกเลี่ยงการแบ่งช่องว่าง
201 linux  bash  shell 

14
บรรทัดที่ยาวที่สุดในไฟล์
ฉันกำลังมองหาวิธีง่ายๆในการค้นหาความยาวของบรรทัดที่ยาวที่สุดในไฟล์ เป็นการดีที่มันจะเป็นคำสั่ง bash shell อย่างง่าย ๆ แทนที่จะเป็นสคริปต์
200 bash  shell  utilities 

13
เชลล์แบบอะซิงโครนัส exec ใน PHP
ฉันมีสคริปต์ PHP ที่ต้องการเรียกใช้เชลล์สคริปต์ แต่ไม่สนใจเกี่ยวกับผลลัพธ์ เชลล์สคริปต์ทำการโทร SOAP จำนวนหนึ่งและทำงานช้าดังนั้นฉันไม่ต้องการชะลอคำขอ PHP ในขณะที่รอการตอบกลับ ในความเป็นจริงคำขอ PHP ควรจะสามารถออกได้โดยไม่ต้องยุติกระบวนการเชลล์ เราได้ตรวจสอบต่างๆexec(), shell_exec(), pcntl_fork()ฟังก์ชั่น ฯลฯ แต่ไม่มีของพวกเขาดูเหมือนจะนำเสนอสิ่งที่ฉันต้องการ (หรือถ้าพวกเขาทำมันไม่ชัดเจนสำหรับฉัน) คำแนะนำใด ๆ
199 php  asynchronous  shell 

17
การดำเนินการคำสั่งหลายบรรทัดในบรรทัดคำสั่งบรรทัดเดียว?
ฉันใช้ Python กับ-cเพื่อดำเนินการลูปซับหนึ่งเช่น: $ python -c "for r in range(10): print 'rob'" ใช้งานได้ดี อย่างไรก็ตามถ้าฉันนำเข้าโมดูลก่อน for for loop ฉันจะได้รับข้อผิดพลาดทางไวยากรณ์: $ python -c "import sys; for r in range(10): print 'rob'" File "<string>", line 1 import sys; for r in range(10): print 'rob' ^ SyntaxError: invalid syntax ความคิดใด ๆ ที่สามารถแก้ไขได้? เป็นสิ่งสำคัญสำหรับฉันที่จะใช้สิ่งนี้เป็นซับในเดียวเพื่อให้ฉันสามารถรวมไว้ใน Makefile

20
เพิ่มคอลัมน์ของตัวเลขที่เชลล์ Unix
เมื่อรับรายการไฟล์files.txtฉันจะได้รายการขนาดดังนี้: cat files.txt | xargs ls -l | cut -c 23-30 ซึ่งผลิตบางสิ่งเช่นนี้ 151552 319488 1536000 225280 ฉันจะหาจำนวนทั้งหมดเหล่านั้นได้อย่างไร
198 linux  unix  shell 

15
ตัวเลขสุ่มจากช่วงใน Bash Script
ฉันต้องสร้างหมายเลขพอร์ตสุ่มระหว่าง2000-65000จากเชลล์สคริปต์ ปัญหาคือ$RANDOMหมายเลข 15 บิตดังนั้นฉันติดอยู่! PORT=$(($RANDOM%63000+2001)) จะทำงานได้ดีถ้ามันไม่ได้สำหรับขนาดที่ จำกัด ไม่มีใครมีตัวอย่างของวิธีที่ฉันสามารถทำได้อาจโดยการแยกบางสิ่งบางอย่างจาก/dev/urandomและรับมันในช่วงหรือไม่
198 bash  shell  scripting 

2
จะใช้ `jq 'ใน shell shell ได้อย่างไร?
ดูเหมือนว่าฉันจะไม่สามารถjqทำงานได้ "ปกติ" ในไปป์ไลน์เชลล์ ตัวอย่างเช่น: $ curl -s https://api.github.com/users/octocat/repos | jq | cat ผลลัพธ์jqเพียงพิมพ์ข้อความช่วยเหลือของ * สิ่งเดียวกันนี้เกิดขึ้นหากฉันพยายามเปลี่ยนเส้นทางjqผลลัพธ์ไปยังไฟล์: $ curl -s https://api.github.com/users/octocat/repos | jq > /tmp/stuff.json มีjqการประกันตัวโดยจงใจหากพิจารณาว่าไม่ได้เรียกใช้จาก tty หรือไม่? ฉันจะป้องกันพฤติกรรมนี้เพื่อให้สามารถใช้jqในขั้นตอนการทำงานได้อย่างไร * (ฉันรู้ว่าตัวอย่างนี้มีการใช้แมวที่ไร้ประโยชน์มันเป็นเพียงภาพประกอบเท่านั้น)
198 shell  pipe  jq 

14
ทดสอบว่าพอร์ตเปิดอยู่บน Linux อย่างมีประสิทธิภาพหรือไม่
จากสคริปต์ทุบตีฉันจะทราบได้อย่างรวดเร็วว่าพอร์ต445เปิด / รับฟังบนเซิร์ฟเวอร์หรือไม่ ฉันได้พยายามสองตัวเลือก แต่ฉันต้องการบางสิ่งบางอย่างรวดเร็ว: 1. lsof -i :445 (ใช้เวลาไม่กี่วินาที) 2. netstat -an |grep 445 |grep LISTEN(ใช้เวลาไม่กี่วินาที) 3. telnet(มันไม่กลับ) 4. nmap, netcatจะไม่สามารถใช้ได้บนเซิร์ฟเวอร์ มันจะเป็นการดีที่ได้ทราบวิธีการที่ไม่ระบุจำนวนแรกและ greps หลังจากนั้น
197 linux  bash  shell  port 

7
คัดลอกโฟลเดอร์แบบเรียกซ้ำโดยไม่รวมบางโฟลเดอร์
ฉันพยายามเขียนสคริปต์ทุบตีง่าย ๆ ที่จะคัดลอกเนื้อหาทั้งหมดของโฟลเดอร์รวมถึงไฟล์และโฟลเดอร์ที่ซ่อนอยู่ในโฟลเดอร์อื่น แต่ฉันต้องการแยกโฟลเดอร์เฉพาะบางอย่างออก ฉันจะบรรลุสิ่งนี้ได้อย่างไร
197 bash  unix  shell  scripting 

8
วิธีการเรียกใช้สคริปต์ PowerShell จากแบตช์ไฟล์
ฉันพยายามเรียกใช้สคริปต์นี้ใน PowerShell ฉันได้บันทึกสคริปต์ด้านล่างเช่นเดียวps.ps1กับบนเดสก์ท็อปของฉัน $query = "SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2" Register-WMIEvent -Query $query -Action { invoke-item "C:\Program Files\abc.exe"} ฉันสร้างสคริปต์ชุดเพื่อเรียกใช้สคริปต์ PowerShell นี้ @echo off Powershell.exe set-executionpolicy remotesigned -File C:\Users\SE\Desktop\ps.ps1 pause แต่ฉันได้รับข้อผิดพลาดนี้:

7
เปรียบเทียบสตริงโดยใช้ sh shell
ฉันใช้ SH เชลล์และฉันพยายามเปรียบเทียบสตริงกับค่าของตัวแปร แต่ifเงื่อนไขจะถูกดำเนินการเป็นจริงเสมอ ทำไม? นี่คือรหัสบางส่วน: Sourcesystem="ABC" if [ "$Sourcesystem" -eq 'XYZ' ]; then echo "Sourcesystem Matched" else echo "Sourcesystem is NOT Matched $Sourcesystem" fi; echo Sourcesystem Value is $Sourcesystem ; แม้จะใช้งานไม่ได้: Sourcesystem="ABC" if [ 'XYZ' -eq "$Sourcesystem" ]; then echo "Sourcesystem Matched" else echo "Sourcesystem is NOT Matched $Sourcesystem" …
197 shell  unix  sh 

4
การประมวลผลสคริปต์ Bash มีจำนวนคำสั่งที่ จำกัด ในแบบคู่ขนาน
ฉันมีสคริปต์ทุบตีที่มีลักษณะเช่นนี้: #!/bin/bash wget LINK1 >/dev/null 2>&1 wget LINK2 >/dev/null 2>&1 wget LINK3 >/dev/null 2>&1 wget LINK4 >/dev/null 2>&1 # .. # .. wget LINK4000 >/dev/null 2>&1 แต่การประมวลผลแต่ละบรรทัดจนกว่าคำสั่งจะเสร็จสิ้นจากนั้นการย้ายไปยังบรรทัดถัดไปนั้นใช้เวลานานมากฉันต้องการประมวลผลอินสแตนซ์ 20 บรรทัดในครั้งเดียวแล้วเมื่อประมวลผลเสร็จแล้วอีก 20 บรรทัด ฉันคิดว่าwget LINK1 >/dev/null 2>&1 &จะส่งคำสั่งไปที่พื้นหลังและดำเนินการต่อ แต่มี 4000 บรรทัดนี่หมายความว่าฉันจะมีปัญหาด้านประสิทธิภาพไม่พูดถึงการถูก จำกัด ในจำนวนกระบวนการที่ฉันควรเริ่มในเวลาเดียวกันดังนั้นจึงไม่ดี ความคิด ทางออกหนึ่งที่ฉันคิดในตอนนี้คือการตรวจสอบว่าหนึ่งในคำสั่งยังคงทำงานอยู่หรือไม่ตัวอย่างเช่นหลังจาก 20 บรรทัดฉันสามารถเพิ่มลูปนี้: while [ $(ps -ef | …
196 linux  bash  shell 

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