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

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

7
การรันสคริปต์ภายในคอนเทนเนอร์นักเทียบท่าโดยใช้เชลล์สคริปต์
ฉันกำลังพยายามสร้างเชลล์สคริปต์สำหรับการตั้งค่าคอนเทนเนอร์นักเทียบท่า ไฟล์สคริปต์ของฉันดูเหมือนว่า: #!bin/bash docker run -t -i -p 5902:5902 --name "mycontainer" --privileged myImage:new /bin/bash การเรียกใช้ไฟล์สคริปต์นี้จะเรียกใช้คอนเทนเนอร์ใน bash ที่เรียกใหม่ ตอนนี้ฉันต้องเรียกใช้ไฟล์สคริปต์ (test.sh) ซึ่งอยู่ในคอนเทนเนอร์แล้วจากเชลล์สคริปต์ที่กำหนดด้านบน (เช่น cd /path/to/test.sh && ./test.sh) จะทำอย่างไร?
89 bash  shell  docker 

7
วิธีหยุดกระบวนการ java อย่างสง่างาม?
ฉันจะหยุดกระบวนการ Java อย่างสง่างามใน Linux และ Windows ได้อย่างไร Runtime.getRuntime().addShutdownHookเรียกเมื่อใดและไม่ได้รับเมื่อใด แล้วเข้ารอบสุดท้ายพวกเขาช่วยอะไรที่นี่? ฉันสามารถส่งสัญญาณบางประเภทไปยังกระบวนการ Java จากเชลล์ได้หรือไม่ ฉันกำลังมองหาโซลูชันแบบพกพาที่ดีกว่า
88 java  linux  windows  shell  process 

6
ใช้คำสั่ง find แต่ไม่รวมไฟล์ในสองไดเร็กทอรี
ฉันต้องการค้นหาไฟล์ที่ลงท้ายด้วย_peaks.bedแต่ไม่รวมไฟล์ในtmpและscriptsโฟลเดอร์ คำสั่งของฉันเป็นดังนี้: find . -type f \( -name "*_peaks.bed" ! -name "*tmp*" ! -name "*scripts*" \) แต่มันไม่ได้ผล ไฟล์ในtmpและscriptโฟลเดอร์จะยังคงแสดงอยู่ ใครมีความคิดเกี่ยวกับเรื่องนี้?
88 linux  shell  unix  find 

9
ฉันจะเปิดหน้าต่าง Git Bash ด้วยไดเร็กทอรีการทำงานโดยใช้สคริปต์ได้อย่างไร
ฉันจะเปิดหน้าต่าง Git Bash ใหม่พร้อมกับไดเร็กทอรีการทำงานที่ระบุโดยใช้สคริปต์ (Bash หรือ Windows batch) ได้อย่างไร เป้าหมายของฉันคือการเปิดหน้าต่าง Git Bash หลายรายการจากสคริปต์เดียวโดยแต่ละรายการจะตั้งค่าเป็นไดเรกทอรีการทำงานที่แตกต่างกัน ด้วยวิธีนี้ฉันสามารถทำงานได้อย่างรวดเร็วหลังจากบูตคอมพิวเตอร์แทนที่จะต้องเปิดหน้าต่าง Git Bash และนำทางแต่ละอันไปยังไดเร็กทอรีการทำงานที่ถูกต้อง ฉันไม่ได้ถามวิธีเปลี่ยนไดเร็กทอรีการทำงานเริ่มต้นเหมือนคำถามนี้ แต่เพื่อเปิดหน้าต่างเทอร์มินัลอย่างน้อยหนึ่งหน้าต่างด้วยไดเรกทอรีการทำงานที่แตกต่างกันจากสคริปต์

10
วิธีอัปเดตไฟล์เดียวในไฟล์ zip
เป็นไปได้ไหมที่จะแทนที่ไฟล์ในไฟล์ zip โดยไม่ต้องคลายซิปลบไฟล์เก่าโดยเพิ่มไฟล์ใหม่แล้วซิปกลับ เหตุผลคือฉันมีไฟล์ zip ซึ่งใหญ่มากมี xml หนึ่งไฟล์อยู่ในไฟล์ zip ที่ฉันต้องอัปเดตบางครั้ง การคลายซิปแล้วรูดซิปใหม่ใช้เวลานาน ดังนั้นฉันต้องการเพียงแค่สามารถแทนที่หนึ่ง xml ภายใน zip ผ่านสคริปต์ ฉันได้ตรวจสอบการอัปเดตบน xml ที่ฉันมีอยู่แล้ว ดังนั้นเป็นไปได้ไหมที่จะแทนที่ xml หนึ่งตัวโดยไม่ต้องคลายซิปแล้ว ขออภัยฉันจะใช้คำสั่ง zip เพื่อทำสิ่งต่างๆเช่นนั้น แต่ปัญหาคือสคริปต์นั้นใช้สำหรับโทรศัพท์ Android และ zip ไม่ใช่คำสั่งที่ฉันสามารถใช้ได้ขออภัยที่ฉันทิ้งมันไป ฉันจะใช้ zip อย่างแน่นอนถ้าทำได้ แต่ฉันเปิดเครื่องรูดสำหรับ droid เท่านั้นจากนั้นมี tar ใน busybox แต่ tar ไม่ทำในสิ่งที่ฉันต้องการ
88 bash  shell  zip 

9
วิธี จำกัด ผู้ใช้ SSH ให้เป็นชุดคำสั่งที่กำหนดไว้ล่วงหน้าหลังจากเข้าสู่ระบบ?
นี่เป็นแนวคิดสำหรับการรักษาความปลอดภัย พนักงานของเราจะสามารถเข้าถึงคำสั่งบางอย่างบนเซิร์ฟเวอร์ linux ได้ แต่ไม่ใช่ทั้งหมด พวกเขาจะต้องมีความเป็นไปได้ในการเข้าถึงไฟล์บันทึก ( less logfile) หรือเริ่มคำสั่งต่างๆ ( shutdown.sh/ run.sh) ข้อมูลพื้นฐาน: พนักงานทุกคนเข้าถึงเซิร์ฟเวอร์ด้วยชื่อผู้ใช้เดียวกัน: ผลิตภัณฑ์ของเราทำงานโดยใช้สิทธิ์ผู้ใช้ "ปกติ" ไม่จำเป็นต้อง "ติดตั้ง" เพียงแค่เปิดเครื่องรูดในผู้ใช้ของคุณและเรียกใช้ เราจัดการเซิร์ฟเวอร์หลายเครื่องที่ "ติดตั้ง" แอปพลิเคชันของเรา johndoeทุกเครื่องมีการใช้ บางครั้งพนักงานของเราจำเป็นต้องเข้าถึงแอปพลิเคชันบนบรรทัดคำสั่งเพื่อเข้าถึงและตรวจสอบไฟล์บันทึกหรือเพื่อเริ่มต้นแอปพลิเคชันด้วยมือ มีเพียงบางคนเท่านั้นที่สามารถเข้าถึงบรรทัดคำสั่งได้ เรากำลังใช้การพิสูจน์ตัวตน ppk บนเซิร์ฟเวอร์ จะดีมากถ้าพนักงาน 1 สามารถเข้าถึงไฟล์บันทึกได้เท่านั้นและพนักงาน 2 ก็สามารถทำ X ได้เช่นกัน ... วิธีแก้ปัญหา: ฉันจะใช้commandตัวเลือกตามที่ระบุไว้ในคำตอบที่ยอมรับ ฉันจะสร้างเชลล์สคริปต์เล็ก ๆ ของฉันเองซึ่งจะเป็นไฟล์เดียวที่สามารถเรียกใช้งานได้สำหรับพนักงานบางคน สคริปต์จะเสนอคำสั่งหลายคำสั่งที่สามารถดำเนินการได้ แต่ไม่มีคำสั่งอื่น ฉันจะใช้พารามิเตอร์ต่อไปนี้authorized_keysจากที่ระบุไว้ที่นี่ : command="/bin/myscript.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-dss AAAAB3....o9M9qz4xqGCqGXoJw= user@host …
88 linux  shell  ssh 


7
bash - วิธีไพพ์ผลลัพธ์จากคำสั่งใดไปยัง cd
ฉันจะไพพ์ผลลัพธ์จากwhichคำสั่งไปที่cd? นี่คือสิ่งที่ฉันพยายามทำ: which oracle | cd cd < which oracle แต่ไม่ได้ผล มีวิธีในการบรรลุเป้าหมายนี้หรือไม่ (แทนที่จะคัดลอก / วางแน่นอน) แก้ไข: ในความคิดที่สองคำสั่งนี้จะล้มเหลวเพราะแฟ้มปลายทางไม่ได้เป็นโฟลเดอร์ ดังนั้นฉันจึงคิดและหาวิธีที่ดีกว่าในการกำจัดส่วนท้าย "/ oracle" ตอนนี้ (sed หรือ awk หรือแม้แต่ Perl) :) แก้ไข: โอเคนั่นคือสิ่งที่ฉันมีในตอนท้าย: cd `which oracle | sed 's/\/oracle//g'`
87 linux  bash  shell  cd 

10
เรียกใช้ "nvm use" โดยอัตโนมัติทุกครั้งที่มีไฟล์. nvmrc ในไดเร็กทอรี
วิธีกำหนดค่าเชลล์ของฉันเพื่อให้nvm useทำงานโดยอัตโนมัติทุกครั้งที่มีไฟล์. nvmrc ในไดเร็กทอรีและใช้เวอร์ชันล่าสุดหรือการกำหนดค่าส่วนกลางเมื่อไม่มีไฟล์. nvmrc

6
ทำไม sudo cat ให้การอนุญาตถูกปฏิเสธ แต่ sudo vim ใช้งานได้ดี?
ฉันกำลังพยายามเพิ่มแหล่งที่เก็บโดยอัตโนมัติในไฟล์ pacman.conf ของ arch ของฉัน แต่ใช้echoคำสั่งในเชลล์สคริปต์ของฉัน อย่างไรก็ตามมันล้มเหลวเช่นนี้: - sudo echo "[archlinuxfr]" >> /etc/pacman.conf sudo echo "Server = http://repo.archlinux.fr/\$arch" >> /etc/pacman.conf sudo echo " " >> /etc/pacman.conf -bash: /etc/pacman.conf: Permission denied หากฉันทำการเปลี่ยนแปลงกับ /etc/pacman.conf ด้วยตนเองโดยใช้ vim โดยทำ sudo vim /etc/pacman.conf และเลิกใช้งานเป็นกลุ่ม:wqทุกอย่างทำงานได้ดีและ pacman.conf ของฉันได้รับการอัปเดตด้วยตนเองโดยไม่มีข้อร้องเรียน "ปฏิเสธการอนุญาต" ทำไมจึงเป็นเช่นนั้น? และฉันจะsudo echoไปทำงานได้อย่างไร? (btw ฉันลองใช้sudo catด้วย แต่ก็ล้มเหลวด้วยการปฏิเสธสิทธิ์เช่นกัน)
87 bash  shell  echo  cat 

5
ฉันสามารถเรียกใช้ฟังก์ชันของเชลล์สคริปต์จากเชลล์สคริปต์อื่นได้หรือไม่
ฉันมี 2 เชลล์สคริปต์ เชลล์สคริปต์ที่สองมีฟังก์ชันต่อไปนี้ second.sh func1 func2 first.sh จะเรียกเชลล์สคริปต์ที่สองด้วยพารามิเตอร์บางตัวและจะเรียก func1 และ func2 พร้อมกับพารามิเตอร์อื่น ๆ ที่เฉพาะเจาะจงสำหรับฟังก์ชันนั้น นี่คือตัวอย่างของสิ่งที่ฉันกำลังพูดถึง วินาที val1=`echo $1` val2=`echo $2` function func1 { fun=`echo $1` book=`echo $2` } function func2 { fun2=`echo $1` book2=`echo $2` } first.sh second.sh cricket football func1 love horror func2 ball mystery ฉันจะบรรลุได้อย่างไร?
87 shell  unix 

6
ส่งออกฟังก์ชันในเชลล์
โปรดบอกวิธีการส่งออกฟังก์ชันในพาเรนต์เชลล์ (bash, sh หรือ ksh) เพื่อให้ฟังก์ชันนี้พร้อมใช้งานสำหรับกระบวนการย่อยทั้งหมดที่เรียกใช้จากกระบวนการหลัก
87 function  shell  export 

4
Unix เชลล์สคริปต์เพื่อตัดทอนไฟล์ขนาดใหญ่
ฉันกำลังพยายามเขียนสคริปต์ Unix ซึ่งจะตัดทอน / ว่างไฟล์ซึ่งแอปพลิเคชันเขียน / เปิดอย่างต่อเนื่องเมื่อมีพื้นที่ถึง 3GB ฉันรู้ว่าคำสั่งด้านล่างจะทำ: cp /dev/null [filename] แต่ฉันจะเรียกใช้สิ่งนี้ในสภาพแวดล้อมการผลิตโดยอัตโนมัติในฐานะงาน cron - เพียงโพสต์ที่นี่เพื่อดูว่าพวกคุณประสบปัญหาใด ๆ ในขณะที่ทำสิ่งที่คล้ายกันนี้หรือไม่
87 bash  shell  truncate 

4
จะตรวจสอบไฟล์ที่ดาวน์โหลดด้วยไฟล์. sig ได้อย่างไร?
เมื่อฉันดาวน์โหลด GCC มันมี.sigไฟล์ด้วยและฉันคิดว่ามันมีไว้เพื่อยืนยันไฟล์ที่ดาวน์โหลด (ฉันดาวน์โหลด GCC จากที่นี่ ) แต่ฉันคิดไม่ออกว่าควรใช้อย่างไร ฉันพยายามgpgแต่มันบ่นเกี่ยวกับคีย์สาธารณะ [root@localhost src]# gpg --verify gcc-4.7.2.tar.gz.sig gcc-4.7.2.tar.gz gpg: Signature made Thu 20 Sep 2012 07:30:44 PM KST using DSA key ID C3C45C06 gpg: Can't check signature: No public key [root@localhost src]# ฉันจะตรวจสอบไฟล์ที่ดาวน์โหลดด้วย.sigไฟล์ได้อย่างไร?

6
อ่านอย่างต่อเนื่องจาก STDOUT ของกระบวนการภายนอกใน Ruby
ฉันต้องการเรียกใช้เครื่องปั่นจากบรรทัดคำสั่งผ่านสคริปต์ทับทิมซึ่งจะประมวลผลผลลัพธ์ที่ได้รับจากเครื่องปั่นทีละบรรทัดเพื่ออัปเดตแถบความคืบหน้าใน GUI ไม่สำคัญจริงๆที่เครื่องปั่นเป็นกระบวนการภายนอกที่ฉันต้องอ่าน stdout ดูเหมือนว่าฉันไม่สามารถจับข้อความความคืบหน้าเครื่องปั่นที่พิมพ์ไปยังเชลล์ได้ตามปกติเมื่อกระบวนการเครื่องปั่นยังคงทำงานอยู่และฉันได้ลองหลายวิธีแล้ว ฉันดูเหมือนจะเข้าถึง stdout ของเครื่องปั่นเสมอหลังจากที่เครื่องปั่นเลิกทำงานไม่ใช่ในขณะที่ยังทำงานอยู่ นี่คือตัวอย่างของความพยายามที่ล้มเหลว รับและพิมพ์ 25 บรรทัดแรกของผลลัพธ์ของเครื่องปั่น แต่หลังจากออกจากกระบวนการเครื่องปั่นแล้วเท่านั้น: blender = nil t = Thread.new do blender = open "| blender -b mball.blend -o //renders/ -F JPEG -x 1 -f 1" end puts "Blender is doing its job now..." 25.times { puts blender.gets} แก้ไข: เพื่อให้ชัดเจนขึ้นเล็กน้อยคำสั่งที่เรียกใช้เครื่องปั่นจะส่งกระแสข้อมูลกลับมาในเชลล์ซึ่งระบุความคืบหน้า (ส่วนที่ …
86 ruby  shell  process  stdout  stdin 

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