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

สคริปต์คือชุดคำสั่งที่เขียนในไฟล์ "ข้อความธรรมดา" ตัวแปลสคริปต์ (ตัวอย่างเช่น Bash หรือ shell อื่น, Python, Perl, Ruby, ฯลฯ ) อ่านไฟล์และดำเนินการตามคำแนะนำราวกับว่าพวกมันถูกป้อนที่ command prompt

7
เขียนทับเอาต์พุตก่อนหน้าใน Bash แทนการต่อท้าย
สำหรับตัวจับเวลาทุบตีฉันใช้รหัสนี้: #!/bin/bash sek=60 echo "60 Seconds Wait!" echo -n "One Moment please " while [ $sek -ge 1 ] do echo -n "$sek " sleep 1 sek=$[$sek-1] done echo echo "ready!" นั่นทำให้ฉันเป็นอย่างนั้น One Moment please: 60 59 58 57 56 55 ... มีความเป็นไปได้ที่จะแทนที่ค่าสุดท้ายของวินาทีโดยล่าสุดเพื่อให้ผลลัพธ์ไม่สร้างเส้นทางขนาดใหญ่ แต่นับถอยหลังวินาทีเหมือนเวลาจริงในตำแหน่งเดียวหรือไม่ (หวังว่าคุณจะเข้าใจสิ่งที่ฉันหมายถึง :))

3
ฉันจะเรียกใช้ OpenVPN เป็น root ในพื้นหลังในสคริปต์ได้อย่างไร
ผมอยากจะเขียนสคริปต์ที่เรียกแรกตามด้วยopenvpn sshเมื่อพิมพ์คำสั่ง sudo openvpn ~/my_connection.ovpn ใน command prompt ฉันได้รับผลลัพธ์ต่อไปนี้: ... Wed Jan 4 21:04:35 2017 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0 Wed Jan 4 21:04:35 2017 /sbin/ip link set dev tun0 up mtu 1500 Wed Jan 4 21:04:35 2017 /sbin/ip addr add dev tun0 local IP_FOO peer IP_FOO Wed Jan 4 21:04:35 2017 …

6
ฉันจะเริ่มแอปพลิเคชันด้วยขนาดและตำแหน่งของหน้าต่างที่กำหนดไว้ล่วงหน้าได้อย่างไร
ฉันสงสัยว่ามีวิธีใดบ้างที่จะบรรลุผลกระทบของปุ่มลัด Ctrl-Alt-Keypad ใน Unity โดยใช้คำสั่งเทอร์มินัลแทน? ฉันต้องการคำสั่งที่ตั้งค่าหน้าต่าง gui ให้มีขนาดครึ่งหนึ่งของหน้าจอไม่ว่าจะชิดซ้ายหรือขวา โดยพื้นฐานแล้วฉันกำลังเขียนสคริปต์ที่ทำงานหลังจากเข้าสู่ระบบโดยใช้ Zenity เพื่อถามว่าฉันต้องการเปิดสภาพแวดล้อมการพัฒนาของฉันหรือไม่ (GVim และ IPython เคียงข้างกัน) ฉันได้รับการพยายามที่จะบรรลุสองหน้าต่างขนาดเท่ากันสำหรับโปรแกรมเหล่านี้โดยใช้set lines= columns=ในของฉัน.gvimrcและc.IPythonWidget.width =และในของฉันc.IPythonWidget.height = ipython_qtconsole_config.pyอย่างไรก็ตามมีปัญหาที่เกี่ยวข้องกับวิธีนี้

1
ตัวแปรสภาวะแวดล้อมไม่สามารถเข้าถึงได้ในสคริปต์ทุบตี
ฉันพบปัญหาแปลก ๆ ฉันใส่ตัวแปร env ลงไป.bashrcและทำงานได้ตามที่ควร: echo $HADOOP_HOME /home/me/dist/hadoop แต่ตัวแปร env ไม่สามารถเข้าถึงได้เมื่อเรียกใช้งานสคริปต์ bash สมมติว่าฉันสร้าง/tmp/sample.shด้วยเนื้อหาด้านล่าง: #! /bin/bash echo $HADOOP_HOME เมื่อฉันเรียกใช้สคริปต์ข้างต้นก้องบรรทัดว่างเปล่า: /tmp/sample.sh ‌

3
วิธีรีสตาร์ทสคริปต์อย่างสมบูรณ์จากภายในสคริปต์เอง
ฉันกำลังตั้งค่าเชลล์สคริปต์ที่มีเมนูและเมนูย่อยตัวเลือก ฯลฯ แต่ในเมนู / เมนูย่อย / ฯลฯ แต่ละรายการฉันต้องการตัวเลือก "กลับไปที่เมนูหลัก" ฉันได้รับการตั้งค่าเมนูแล้วและใช้งานได้ดี แต่ฉันต้องการวิธีในการรีสตาร์ทสคริปต์ตั้งแต่เริ่มต้นรีเซ็ตตัวแปรทั้งหมดเป็นต้น หรือวิธีออกจากสคริปต์ปัจจุบันและเริ่มใหม่อีกครั้ง ฉันพยายามทำสิ่งนี้: ScriptLoc=$(readlink -f "$0") ./ScriptLoc แต่นั่นเริ่มต้นสคริปต์ "ใหม่" ในสคริปต์ "เก่า" ดังนั้นเมื่อฉันออกจากสคริปต์ "ใหม่" สคริปต์จะกลับไปที่สคริปต์ "เก่า" (ถ้าเหมาะสม) มันเป็นสคริปต์ที่อยู่ในประเภทของสคริปต์ ทุกคนมีความคิดวิธีการเริ่มต้นใหม่อย่างสมบูรณ์?

3
ฉันจะค้นหาผู้ให้บริการอินเทอร์เน็ต (ISP) ของฉันโดยใช้สคริปต์ทุบตีได้อย่างไร
ฉันต้องการใช้ชื่อผู้ให้บริการอินเทอร์เน็ตในสคริปต์และฉันไม่รู้ว่าฉันจะทำสิ่งนี้ได้อย่างไร โปรดช่วยฉันขอบคุณล่วงหน้า
21 bash  scripts 

2
หลังจากอัปเกรดเป็น 16.04 LTS rc.local ไม่ได้ดำเนินการคำสั่ง
ในรุ่นก่อนหน้าติดตั้ง kubuntu 15.xx ฉันเพิ่มบรรทัดลง/etc/rc.local- /home/diet/scripts/my-auto-mount-scriptซึ่งเห็นได้ชัดว่าอ้างถึงสคริปต์ว่าถ้าบนไดรฟ์เครือข่าย wifi ที่บ้านควรจะติดตั้ง สิ่งนี้ทำงานได้อย่างไม่มีที่ติบน kubuntu 15.xx หลังจากการอัพเกรดดูเหมือนว่า/etc/rc.localจะถูกละเว้นในการบูตเพราะการเรียกใช้คำสั่ง/etc/rc.localยังคงดูเหมือนจะทำเคล็ดลับ เหตุผลที่ฉันคิดว่า rc.local กำลังถูกเพิกเฉยก็เพราะสคริปต์ที่อ้างถึงควรสร้างบันทึกที่ประสบความสำเร็จของสคริปต์ แต่สคริปต์ก็ล้มเหลวเช่นกัน แต่ไม่มีบันทึก ใครสามารถให้คำแนะนำฉันเกี่ยวกับวิธีการแก้ไขปัญหานี้ได้บ้าง PS: ใช่ฉันรู้ว่าการใส่สิ่งของ/etc/fstabเป็นวิธีการติดตั้งไดรฟ์ แต่เมื่อฉันไม่อยู่บ้านฉันเกลียดที่ฉันเห็นไดรฟ์บนปลาโลมาและมีกากบาทสีแดงเล็ก ๆ เหล่านั้นเพราะไม่มี . ด้วยวิธีนี้เมื่อฉันอยู่บนท้องถนน (เป็นแล็ปท็อป) ผู้คนจะมองไม่เห็นสิ่งที่ฉันมีที่บ้าน
21 scripts  kubuntu  16.04 

4
วิธีการใส่รหัสผ่านเพียงครั้งเดียวในสคริปต์ทุบตีต้องใช้ sudo
ข้อมูล ฉันต้องการให้ผู้ใช้โอเปอเรเตอร์บนเครื่องนี้ติดตั้ง cifs ของตัวเอง sudoersไฟล์แล้วมี/bin/mount -t cifs //*/* /media/* -o username=*คำสั่งสำหรับผู้ประกอบการทั้งหมด ฉันต้องการให้ผู้ใช้เมาcifsนต์แชร์ผ่านสคริปต์ที่พิมพ์รหัสผ่านเพียงครั้งเดียวไม่ใช่สองครั้ง รหัสผ่าน sudo และรหัสผ่าน cifs เหมือนกัน สิ่งที่ฉันมีอยู่แล้ว สคริปต์นี้ใช้งานได้: #!/bin/bash sudo 'mount -t cifs //192.168.1.1/home /media/$USER/home -o username=$USER' ... แต่ผู้ใช้ต้องพิมพ์รหัสผ่านเดียวกันสองครั้ง! ครั้งเดียวสำหรับ sudo ครั้งหนึ่งสำหรับเขานั้นเอง สิ่งนี้จะได้ผล: #!/bin/bash echo -n Password: read -s szPassword echo $szPassword | sudo -S sh -c 'echo $szPassword …
21 bash  scripts  sudo 

2
ทราบว่าเชลล์สคริปต์มีข้อผิดพลาดทางไวยากรณ์โดยไม่ต้องรันสคริปต์หรือไม่
ฉันมีสคริปต์เชลล์แบบยาวที่มีเงื่อนไขจำนวนมากและฉันต้องการทราบว่ามีข้อผิดพลาดทางไวยากรณ์ในสคริปต์โดยไม่เรียกใช้หรือไม่ เนื่องจากเชลล์สคริปถูกตีความฉันคิดว่ามันเป็นไปไม่ได้ แต่มีวิธีรู้โดยใช้เล่ห์เหลี่ยมบางอย่าง
21 scripts 

5
เรียกใช้งานสคริปต์ก่อนที่จะปิดเครื่อง
เมื่อฉันปิดเครื่องคอมพิวเตอร์ฉันต้องการแสดงงานที่ค้างอยู่ที่ฉันต้องทำก่อนออกจากสำนักงาน ... ฉันมีแอปพลิเคชั่นในพื้นที่เพื่อจัดการงานเหล่านั้นโดยทั่วไปฉันแค่ต้องการเรียกใช้คำสั่งและปิดลงหลังจากฉันฆ่า แอปดำเนินการ
21 scripts  shutdown 

3
ตรวจสอบความน่าเชื่อถือว่ามีการติดตั้งแพคเกจหรือไม่
ฉันมีข้อกำหนดที่ง่าย ฉันต้องการกำหนดตัวแปรหลายตัวที่จะสอดคล้องกับจำนวนแพ็คเกจที่ฉันต้องการติดตั้งผ่านเชลล์สคริปต์ โค้ดตัวอย่างด้านล่าง: MISC="shutter pidgin" WEB="apache2 mongodb" for pkg in $MISC $WEB; do if [ "dpkg-query -W $pkg | awk {'print $1'} = """ ]; then echo -e "$pkg is already installed" else apt-get -qq install $pkg echo "Successfully installed $pkg" fi done ทุกอย่างทำงานได้ดี แต่ตรรกะดูเหมือนว่ามีข้อบกพร่องเพราะไม่ได้ติดตั้งแพ็คเกจที่ฉันต้องการอย่างน่าเชื่อถือ อาจกล่าวได้ว่าติดตั้งไว้แล้วหรือกำลังพยายามติดตั้งแพคเกจที่ติดตั้งไว้ก่อนหน้านี้แล้ว ฉันได้ลองด้วยcommand -vหรือต่อไปนี้: if [ …
20 scripts 

2
วิธีตั้งกฎ iptables เหล่านี้ให้ทำงานเมื่อเริ่มต้น
ฉันมักจะใช้กฎ iptables เมื่อใดก็ตามที่ฉันเข้าสู่ระบบ จากเทอร์มินัล I พิมพ์; sudo sh firewall.sh การตั้งค่าคอมพิวเตอร์น้องสาวของฉันฉันต้องการให้การป้องกันไฟร์วอลล์ขั้นพื้นฐานแก่เธอ เธอจะไม่เข้าสู่ระบบในฐานะผู้ดูแลระบบเพียงบัญชีมาตรฐาน ฉันจะทำให้สคริปต์ไฟร์วอลล์ทำงานทุกครั้งที่เธอลงชื่อเข้าใช้โดยไม่ต้องพิมพ์รหัสผ่านใด ๆ ได้อย่างไร สคริปต์ที่ฉันเขียนสำหรับคอมพิวเตอร์น้องสาวของฉันประกอบด้วย; #!/bin/sh modprobe ip_conntrack iptables -F iptables -X iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -I OUTPUT -p tcp --dport 80 --sport 32768:61000 -j ACCEPT iptables -I OUTPUT -p udp …

2
จะค้นหารุ่นของเครื่อง Ubuntu จากระยะไกลได้อย่างไร
ฉันมีมากกว่า 60 ถึง 80 ระบบที่ใช้งาน Ubuntu บางตัวมาพร้อมกับเวอร์ชัน 8.04 และบางตัวมาพร้อมกับเวอร์ชันล่าสุด 10.10 ตอนนี้เรากำลังอยู่ในขั้นตอนการอัพเกรดอูบุนตูที่เก่ากว่าทั้งหมดไปเป็นเวอร์ชั่นที่ใหม่กว่า เป็นการยากที่จะเปิดทุกระบบ Ubuntu และจดบันทึกรุ่น Ubuntu ที่เก่ากว่าแล้วอัปเกรด ฉันมีที่อยู่ IP ของเครื่องเหล่านี้ทั้งหมดในไฟล์ข้อความ ดังนั้นฉันกำลังมองหาสคริปต์ทุบตีง่าย ๆ ซึ่งจะทำให้งานเป็นไปโดยอัตโนมัติ ฉันคาดหวังว่าผลลัพธ์จะเป็นดังนี้: 172.29.34.40 ubuntu 10.04 172.29.34.41 ubuntu 8.04 172.29.34.42 ubuntu 8.10 และอื่น ๆ .. ทุกคนสามารถช่วยฉันได้ไหม
20 bash  scripts 

2
ฉันจะเปลี่ยน 'about: config' ของ Firefox จาก shell script ได้อย่างไร
บนสิ่งแรกที่ผมทำเมื่อครั้งแรกที่ใช้โปรไฟล์ Firefox สดคือการตั้งค่าbrowser.urlbar.trimURLsไปfalse(ซึ่งจริงๆควรจะมีการเปลี่ยนแปลงแม้ว่า 'การตั้งค่า' หรือควรจะมีการเริ่มต้นยังคงอยู่) และเพื่อเปลี่ยนการค้นหาและหน้าแรกเริ่มต้นที่ DuckDuckGo ขณะนี้ฉันไปที่ด้วยตนเองabout:configคลิกผ่านข้อความเตือนที่โกรธและค้นหากุญแจ (ซึ่งต่างจากในตัวแก้ไข DConf แม้ไม่ได้จัดระเบียบ) ดังนั้นฉันต้องการทราบวิธีการอ่านและเขียนคีย์เหล่านี้จากบรรทัดคำสั่งเพื่อให้ฉันสามารถเพิ่ม tweaks เหล่านี้ในสคริปต์การปรับแต่งของฉัน

3
ประเภทของเส้นทางใน shebang เป็นที่นิยมมากกว่า?
ในสคริปต์บรรทัดแรกควรระบุพา ธ ไปยังล่าม แต่บนเซิร์ฟเวอร์ที่แตกต่างกัน Linux, Unix หรือ BSD เส้นทางนี้อาจแตกต่างกัน สิ่งที่เป็นที่นิยมมากขึ้น? #!/usr/bin/env bash หรือ #!/bin/bash
20 scripts  shebang 

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