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

สคริปต์คือลำดับของคำสั่งหรือคำสั่งที่ดำเนินการโดยโปรแกรมล่ามแทนที่จะรวบรวมเป็นโปรแกรมปฏิบัติการแบบสแตนด์อโลน

2
Shebang สอดคล้องกับคำสั่ง `#! / usr / bin / env - อาร์กิวเมนต์ 'ล้มเหลวบน Linux
ฉันมีสคริปต์ง่าย ๆ : #!/usr/bin/env ruby --verbose # script.rb puts "hi" บนกล่อง OSX ของฉันก็จะทำงานได้ดี: osx% ./script.rb hi อย่างไรก็ตามในกล่อง linux ของฉันมันมีข้อผิดพลาดเกิดขึ้น linux% ./script.rb /usr/bin/env: ruby --verbose: No such file or directory ถ้าฉันเรียกใช้ shebang line ด้วยตนเองมันก็ใช้ได้ดี linux% /usr/bin/env ruby --verbose ./script.rb hi แต่ฉันสามารถทำซ้ำข้อผิดพลาดถ้าฉันแพ็คruby --verboseเป็นอาร์กิวเมนต์เดียวไปenv linux% /usr/bin/env "ruby --verbose" ./script.rb /usr/bin/env: ruby --verbose: No …

4
จะออกจากเชลล์สคริปต์ได้อย่างไรหากส่วนหนึ่งล้มเหลว?
ฉันจะเขียนเชลล์สคริปต์ที่ออกได้อย่างไรหากส่วนหนึ่งล้มเหลว? ตัวอย่างเช่นหากข้อมูลโค้ดต่อไปนี้ล้มเหลวสคริปต์ควรออก n=0 until [ $n -ge 5 ] do gksu *command* && break n=$[$n+1] sleep 3

5
ฉันจะออกจากสคริปต์ในคำสั่งแบบมีเงื่อนไขได้อย่างไร
ฉันกำลังเขียนสคริปต์ทุบตีที่ฉันต้องการออกหากผู้ใช้ไม่ได้รูท เงื่อนไขทำงานได้ดี แต่สคริปต์ไม่ออก [[ `id -u` == 0 ]] || (echo "Must be root to run script"; exit) ฉันลองใช้&&แทนที่จะใช้;แต่ไม่ได้ผล

3
การเรียกใช้สคริปต์ระหว่างการบูท / เริ่มต้น; init.d vs cron @reboot
ฉันกำลังพยายามที่จะเข้าใจความแตกต่างระหว่างinit.dและ cron @rebootสำหรับการเรียกใช้สคริปต์เมื่อเริ่มต้น / บูตระบบ การใช้@reboot(วิธีนี้ถูกกล่าวถึงในฟอรัมนี้โดยhs.chandra ) เป็นสิ่งที่ง่ายกว่าเพียงเข้าไปในcrontab -eการสร้าง@reboot /some_directory/to_your/script/your_script.txtและจากนั้นyour_script.txtจะถูกเรียกใช้งานทุกครั้งที่มีการรีบูตระบบ ในเชิงลึกของคำอธิบาย@rebootคือที่นี่ อีกทางเลือกหนึ่งโดยฝัง/etc/init.d/your_script.txtลงในบรรทัดที่สองของสคริปต์ของคุณเช่น: #!/bin/bash # /etc/init.d/your_script.txt คุณสามารถเรียกใช้chmod +x /etc/init.d/your_script.txtและควรส่งผลyour_script.txtให้รันทุกครั้งที่ระบบบูต Q1:ความแตกต่างที่สำคัญระหว่างสองคืออะไร Q2: ข้อไหนแข็งแกร่งกว่ากัน Q3:มีหนึ่งในสองที่ดีกว่านี้หรือไม่? Q4:นี่เป็นวิธีที่ถูกต้องในการฝังสคริปต์เพื่อให้ทำงานในระหว่างการบูทหรือไม่? ฉันจะรวมไฟล์ bash .sh ไว้เพื่อทำงานในระหว่างการเริ่มต้น

7
เรียกใช้งานคำสั่งรีโมตปลดการเชื่อมต่อ ssh อย่างสมบูรณ์
ฉันมี 2 เครื่องคอมพิวเตอร์และlocalpcremoteserver ฉันต้องการที่จะดำเนินการคำสั่งบางอย่างเกี่ยวกับlocalpc remoteserverสิ่งหนึ่งที่ต้องทำคือเริ่มสคริปต์สำรองที่ทำงานหลายชั่วโมง ฉันต้องการคำสั่งlocalpcให้ "ดับไฟ" จากนั้นทำงานโดยอิสระอย่างremoteserverเต็มที่เหมือนlocalpcไม่เคยมีมาตั้งแต่แรก นี่คือสิ่งที่ฉันทำไปแล้ว: remoteserver ภายในมีสคริปต์: /root/backup.sh localpc มีกำหนดการทำงานนี้: ssh root@remoteserver 'nohup /root/backup.sh' & ฉันกำลังทำสิ่งนี้อย่างถูกวิธีหรือไม่? มีวิธีที่ดีกว่าในการทำเช่นนี้? ฉันจะพบปัญหาใด ๆ ในการทำเช่นนี้หรือไม่?

7
Autohotkey เทียบเท่าหรือไม่
มีผลิตภัณฑ์ / วิธีการที่เทียบเท่าสำหรับ AutoHotkey หรือไม่ สำหรับผู้ที่ไม่ทราบว่าเป็นผลิตภัณฑ์ที่ให้คุณตั้งโปรแกรมการเคลื่อนไหวของเมาส์และแป้นพิมพ์ สิ่งนี้ทำให้ฉัน "แมโคร" ฟังก์ชั่นบางอย่างในโปรแกรมแทนที่จะต้องทำด้วยตนเอง ในสมัยก่อนพวกเขาเคยเรียกพวกเขาว่าแป้นคีย์บอร์ด แต่นั่นเป็นเพียงครึ่งหนึ่งของการแก้ปัญหาเพราะฉันต้องการ "การเคลื่อนไหวของเมาส์" เครื่องบรรจุด้วย มีสัตว์ร้ายเช่นนี้ไหม?

15
เรียกใช้คำสั่งผ่าน SSH บนเซิร์ฟเวอร์หลายเครื่องโดยอัตโนมัติ
มีรายการที่อยู่ IP ในไฟล์. txt เช่น: 1.1.1.1 2.2.2.2 3.3.3.3 ที่อยู่ IP ทุกหลังมีเซิร์ฟเวอร์และทุกเซิร์ฟเวอร์มี sshd ที่ทำงานอยู่ที่พอร์ต 22 ไม่ใช่เซิร์ฟเวอร์ทุกเครื่องที่อยู่ในknown_hostsรายการ (บนพีซีของฉัน Ubuntu 10.04 LTS / bash) ฉันจะรันคำสั่งบนเซิร์ฟเวอร์เหล่านี้และรวบรวมผลลัพธ์ได้อย่างไร เป็นการดีที่ฉันต้องการเรียกใช้คำสั่งแบบขนานบนเซิร์ฟเวอร์ทั้งหมด ฉันจะใช้การรับรองความถูกต้องของรหัสสาธารณะในเซิร์ฟเวอร์ทั้งหมด นี่คือข้อผิดพลาดที่อาจเกิดขึ้น: ssh แจ้งให้ฉันใส่คีย์ ssh ของเซิร์ฟเวอร์ที่ระบุลงในknown_hostsไฟล์ของฉัน คำสั่งที่กำหนดอาจส่งคืนโค้ดการออกที่ไม่ใช่ศูนย์ซึ่งบ่งชี้ว่าเอาต์พุตอาจไม่ถูกต้อง ฉันต้องยอมรับว่า การเชื่อมต่ออาจล้มเหลวในการสร้างไปยังเซิร์ฟเวอร์ที่กำหนดตัวอย่างเช่นเนื่องจากข้อผิดพลาดของเครือข่าย ควรมีการหมดเวลาในกรณีที่คำสั่งรันนานกว่าที่คาดไว้หรือเซิร์ฟเวอร์หยุดทำงานในขณะที่รันคำสั่ง เซิร์ฟเวอร์คือ AIX / ksh (แต่ฉันคิดว่ามันไม่สำคัญ

2
การใช้ setuid bit อย่างถูกต้อง
ฉันมีกระบวนการที่ต้องการสิทธิ์รูทเมื่อรันโดยผู้ใช้ปกติ เห็นได้ชัดว่าฉันสามารถใช้ "setuid bit" เพื่อทำสิ่งนี้ให้สำเร็จ วิธีที่เหมาะสมในการทำเช่นนี้ในระบบ POSIX คืออะไร? นอกจากนี้ฉันจะทำสิ่งนี้กับสคริปต์ที่ใช้ล่าม (bash, perl, python, php, ฯลฯ ) ได้อย่างไร
45 scripting  setuid 

7
นามสกุลไฟล์สำหรับสคริปต์เชลล์ยูนิกซ์ [ปิด]
บนวิกิพีเดียบทความสำหรับ. shพูดว่า: สำหรับชนิดของไฟล์นามสกุล .sh ดูเปลือกบอร์น หอยยูนิกซ์อื่น ๆ ล่ะ? ฉันรู้ว่าshebang ถูกนำมาใช้ภายในไฟล์เพื่อระบุล่ามสำหรับการดำเนินการ แต่ผมสงสัยว่า: ข้อดีและข้อเสียของไฟล์นามสกุลคืออะไรและไม่มีนามสกุลไฟล์?

8
สคริปต์เพื่อเปลี่ยนไดเรกทอรีปัจจุบัน (cd, pwd)
ฉันต้องการเรียกใช้สคริปต์เพื่อเปลี่ยนไดเรกทอรีการทำงานปัจจุบัน: #!/bin/bash cd web/www/project แต่หลังจากที่ฉันเรียกใช้แล้ว pwd ปัจจุบันยังคงไม่เปลี่ยนแปลง! ฉันจะทำสิ่งนั้นได้อย่างไร

7
อะไรช่วยในการจำที่ดีสำหรับคำสั่ง shell double และ single?
ฉันเขียนสคริปต์ไม่เพียงพอที่จะจำได้โดยไม่ต้องค้นหาว่าการเสนอราคาสองครั้งหรือครั้งเดียวส่งผลให้ตัวแปร Unix ถูกแทนที่ ฉันเข้าใจว่าเกิดอะไรขึ้น คำถามของฉันคือไม่มีใครมีเคล็ดลับความจำสำหรับการสร้างกฎการอ้างอิงที่ถูกต้องในหัวของฉัน

4
วิธีรับบรรทัดคำสั่งทั้งหมดจากกระบวนการ
ฉันจะรับอาร์กิวเมนต์คำสั่งหรือบรรทัดคำสั่งทั้งหมดจากกระบวนการที่รันโดยใช้ชื่อกระบวนการได้อย่างไร ตัวอย่างเช่นกระบวนการนี้: # ps PID USER TIME COMMAND 1452 root 0:00 /sbin/udhcpc -b -T 1 -A 12 -i eth0 -p /var/run/udhcpc.eth0.pid และสิ่งที่ฉันต้องการคือ/sbin/udhcpc -b -T 1 -A 12 -i eth0 -p /var/run/udhcpc.eth0.pidหรือข้อโต้แย้ง ฉันรู้ชื่อกระบวนการและต้องการข้อโต้แย้ง ฉันใช้ Busybox กับ SliTaz

6
Universal Node.js shebang?
Node.jsเป็นที่นิยมมากในทุกวันนี้และฉันได้เขียนสคริปต์ลงไป น่าเสียดายที่ความเข้ากันได้เป็นปัญหา อย่างเป็นทางการล่าม Node.js ควรจะเรียกว่าnodeแต่ Debian และ Ubuntu จัดส่งปฏิบัติการที่เรียกว่าnodejsแทน ฉันต้องการสคริปต์แบบพกพาที่ Node.js สามารถทำงานกับในสถานการณ์ให้ได้มากที่สุด สมมติว่าชื่อไฟล์คือfoo.jsฉันต้องการให้สคริปต์ทำงานในสองวิธี: ./foo.jsเรียกใช้สคริปต์ถ้าอย่างใดอย่างหนึ่งnodeหรืออยู่ในnodejs$PATH node foo.jsยังเรียกใช้สคริปต์ (สมมติว่าล่ามเรียกว่าnode) หมายเหตุ:คำตอบโดย xavierm02 และตัวฉันเป็นสองรูปแบบของสคริปต์หลายภาษา ฉันยังคงสนใจวิธีการแก้ปัญหาแบบ shebang อย่างแท้จริงหากมีอยู่จริง

7
การใช้ xargs กับอินพุตจากไฟล์
สมมติว่าฉันมีไฟล์ดังต่อไปนี้ bob john sue ตอนนี้เหล่านี้ corrospond โดยตรงไป (ในกรณีนี้) รูปแบบ URL เช่นhttp://example.com/persons/bob.tar, ,john.tarsue.tar xargsผมอยากจะใช้เส้นเหล่านี้และเรียกพวกเขาผ่าน ฉันไม่รู้ว่าสิ่งใดที่ส่งผ่านไปยังคำสั่งที่ถูกเรียกใช้งาน ฉันจะเข้าถึงพารามิเตอร์ได้อย่างไรจากพรอมต์ (บอกว่าฉันต้องการสะท้อนแต่ละบรรทัดเช่นcat file | xargs echo $PARAM) หรือจากสคริปต์ทุบตี
41 bash  scripting  xargs 

5
แทนที่ตัวแปรสภาพแวดล้อมในไฟล์ด้วยค่าจริงหรือไม่?
มีวิธีง่าย ๆ ในการทดแทน / ประเมินตัวแปรสภาพแวดล้อมในไฟล์หรือไม่? อย่างสมมติว่าฉันมีไฟล์config.xmlที่มี: <property> <name>instanceId</name> <value>$INSTANCE_ID</value> </property> <property> <name>rootPath</name> <value>/services/$SERVICE_NAME</value> </property> ... ฯลฯ ฉันต้องการแทนที่$INSTANCE_IDในไฟล์ด้วยค่าของINSTANCE_IDตัวแปรสภาพแวดล้อม$SERVICE_NAMEด้วยค่าของSERVICE_NAMEenv var ฉันไม่ทราบว่าจะต้องใช้ vars รุ่นใด (หรือมากกว่านั้นฉันไม่ต้องการอัปเดตสคริปต์หากมีคนเพิ่มตัวแปรสภาพแวดล้อมใหม่ลงในไฟล์ปรับแต่ง) ขอบคุณ!

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