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

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

3
บังคับใช้“ ไม่ดี” (ไม่ใช่ 0) ส่งคืนรหัสคำสั่งเทอร์มินัลหรือไม่
ฉันมีเฟรมเวิร์กที่เขียนด้วยไพ ธ อนและเพื่อวัตถุประสงค์ในการทดสอบโดยทั่วไปฉันต้องการทำ subprocess (หรือที่เรียกว่า shell call) ... ซึ่งควรจะกลับมาพร้อมกับ RC! = 0 ฉันพยายามเรียกใช้ไฟล์ปฏิบัติการที่ไม่มีอยู่ หรือเรียกใช้ "ทางออก 1"; แต่มีเหตุผลบางประการที่แปลเป็น FileNotFoundError ดังนั้นฉันสามารถทำอะไรได้อีกเพื่อเรียกรหัสส่งคืน! = 0 (ในลักษณะ "น่าเชื่อถือ" หมายถึงคำสั่งไม่ควรคืนค่า 0 ทันทีที่เวลาในอนาคต) ฉันคิดว่าจะ "ค้นหา" สำหรับไบนารีที่เรียกว่า exit แต่ก็เป็นเช่นนั้น: > /usr/bin/env exit /usr/bin/env: exit: No such file or directory

1
ฉันจะเรียกใช้สคริปต์เมื่อแหล่งจ่ายไฟเสียบปลั๊กหรือออกได้อย่างไร
ด้วยเหตุผลบางอย่างความสว่างหน้าจอแล็ปท็อปของฉันไม่อัปเดตเมื่อฉันเสียบปลั๊กหรือจ่ายไฟ ฉันได้ดูวิธีแก้ปัญหาเล็กน้อยสำหรับปัญหานั้น แต่ดูเหมือนว่าไม่มีวิธีใดที่ทำงานได้ดี ดังนั้นแทนที่จะหมดหวังและเลิกฉันตัดสินใจที่จะลองเปลี่ยนสิ่งนี้ให้เป็นประสบการณ์การเรียนรู้และดูว่าฉันไม่สามารถเขียนสคริปต์ที่ทำเพื่อฉันได้หรือไม่ ฉันลองหามันเองด้วยความช่วยเหลือจากอินเทอร์เน็ตแน่นอน แต่ฉันค่อนข้างใหม่ในการทุบตีสคริปต์และ Ubuntu โดยทั่วไปดังนั้นฉันจึงไม่ได้ไปไกล สิ่งที่ฉันสามารถคิดออกได้คือฉันสามารถค้นหาสถานะของแบตเตอรี่ด้วย $ upower -i /org/freedesktop/UPower/devices/battery_BAT1 | grep -E "state" state: charging/discharging ขึ้นอยู่กับว่าเสียบอะแดปเตอร์ AC หรือไม่ฉันไม่รู้ว่ามันมีประโยชน์หรือไม่ แต่มันก็เจ๋งดีและฉันไม่รู้วิธีใช้grepมาก่อน อย่างไรก็ตามมีวิธีที่ค่อนข้างสะอาดในการทำเช่นนี้หรือไม่? โดย "วิธีที่สะอาด" ฉันหมายถึงวิธีที่หนึ่งที่มีประสบการณ์สคริปต์ทุบตี จำกัด สามารถเข้าใจ หนึ่งคำถามที่คล้ายกันฉันพบว่ามีคำตอบที่ดีคือคำถามนี้ซึ่งกล่าวว่าต่อไปนี้: เมื่อคุณเสียบอะแดปเตอร์ AC เข้า / ออกสคริปต์ที่/etc/pm/power.dถูกเรียกด้วย> อาร์กิวเมนต์: "true" (ถ้าคุณใช้แบตเตอรี่) หรือ "false" (ถ้าคุณใช้อะแดปเตอร์ไฟ) ปัญหาคือฉันไม่รู้วิธีเข้าถึงอาร์กิวเมนต์นั้นจากภายในสคริปต์ ดังนั้นฉันคิดว่าทุกอย่างจะเดือดร้อนเป็นปัญหาที่ค่อนข้างง่าย แต่ฉันคิดว่าฉันโพสต์คำถามต่อไปในกรณีที่คนมีวิธีแก้ปัญหาที่ดีกว่า

3
จะเปลี่ยนชื่อไฟล์เป็นการเข้ารหัสที่แตกต่างกันอย่างไร
ฉันมีการfile nameเข้ารหัส3 ชนิดบนreiserfsฮาร์ดไดรฟ์ที่ติดตั้ง: CP1251, KOI-8, UTF-8 และ ASCII ฉันต้องแปลงการเข้ารหัสทั้งหมดเป็น UTF-8 ซ้ำ ๆ มียูทิลิตี้ใดบ้างที่จะตรวจจับการเข้ารหัสซอร์สและแปลงเป็น UTF-8 หรือฉันต้องเขียนสคริปต์ Python

2
ฉันจะส่งผ่านอาร์กิวเมนต์บรรทัดคำสั่งไปยังสคริปต์ผ่าน Dash ได้อย่างไร (14.04)
ฉันเพิ่งถามคำถามนี้เกี่ยวกับการเพิ่มเชลล์สคริปต์ใน Dash: ใน 14.04 ฉันจะรันสคริปต์ทุบตีที่ฉันเขียนโดยไม่ต้องเปิด terminal ได้อย่างไร มันทำงานได้อย่างสมบูรณ์ คำถามติดตามผล: ฉันจะส่งผ่านอาร์กิวเมนต์บรรทัดคำสั่งผ่าน Dash ได้อย่างไร ตัวอย่าง: ในกรณีนี้คำสั่ง dash ของฉันชื่อ "Panel" สคริปต์ติดตั้งหน้าจอของฉันด้วยเทอร์มินัล 8 เครื่อง นี่คือตัวอย่างของการใช้งาน: panel # Tile the screen with 8 terminal windows. panel --left # Tile the left side with 4 terminals panel --right # Tile the right side with 4 terminals …

2
Ubuntu เทียบเท่ากับ CentOS สำเร็จ / ล้มเหลว
บริการจำนวนมากใน CentOS มีลักษณะเช่นนี้ (ยกเว้นสีเขียวและสีแดงตามลำดับ): $ sudo service blah start Starting blah: [ OK ] $ sudo service notrunning stop Stopping notrunning: [FAILED] นี้เกิดขึ้นเพราะ/etc/init.dสคริปต์ใช้สคริปต์สาธารณูปโภคใน/etc/rc.d/init.d/functionsที่เรียกว่าและsuccess failureนี่เป็นตัวอย่างข้อมูลจาก/etc/init.d/sshdใน CentOS: echo -n $"Starting $prog: " $SSHD $OPTIONS && success || failure คำถามของฉันคือ: มีอูบุนตูที่เทียบเท่าหรือไม่ ฉันสามารถคัดลอกสคริปต์ไปได้ แต่มันมีความซับซ้อนมากกว่าที่คุณคิดและทำไมต้องคิดค้นวงล้อใหม่หากฉันไม่ต้องทำ

3
ฉันจะรันสคริปต์บน Unity login / logout ได้อย่างไร
ฉันมีสองสคริปต์ - หนึ่งเพื่อเมานต์บางโฟลเดอร์ผ่าน SSHFS - และหนึ่งเพื่อยกเลิกการต่อเชื่อม ฉันต้องการเปิดตัวเมานต์สคริปต์เมื่อเดสก์ท็อปเริ่มต้นของ Ubuntu เริ่มทำงาน (หลังจากฉันเข้าสู่ระบบที่คอนโซลกราฟิก) - และสคริปต์เลิกเมานท์เมื่อฉัน "ออกจากระบบ ... " จากฟันเฟืองล้อที่ด้านบนขวาของ เดสก์ท็อป ได้โปรดบอกใครสักคนว่าจะทำสิ่งนี้ได้อย่างไร? ตะขอ / มาตรฐานที่สะดวกที่สุดในการเรียกใช้คำสั่งเมื่อเปิด / ออกจากเดสก์ท็อปคืออะไร

3
การประเมินสตริงในเชลล์สคริปต์
ฉันทำตามคำแนะนำสคริปต์เปลือก bash นี้: http://www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html ในส่วนการเปรียบเทียบตัวเลขมันอ้างอิงตัวอย่าง: anny > num=`wc -l work.txt` anny > echo $num 201 anny > if [ "$num" -gt "150" ] More input> then echo ; echo "you've worked hard enough for today." More input> echo ; fi สิ่งที่ดูเหมือนจะเกิดขึ้นข้างต้นคือเราเก็บสตริงคำสั่งไว้ในตัวแปร bash จากนั้นเราเรียกใช้ echo บนตัวแปร สิ่งที่น่าจะเกิดขึ้นคือสตริงถูกประเมินและคำสั่ง wc ถูกดำเนินการและส่งคืนจำนวนบรรทัดไปยังเทอร์มินัลการควบคุม ตกลงดังนั้นฉันจึงเปิดตัวเทอร์มินัลของฉันใน Ubuntu …

2
รับเวลาฟังทั้งหมดจาก CLI ด้วยแบนชี
มีวิธีที่ฉันจะได้รับเวลาฟังทั้งหมดจากบรรทัดคำสั่งหรือไม่ ฉันต้องการเขียนสคริปต์เพื่อติดตามเวลาที่ฉันใช้ฟังเพลงเป็นประจำทุกวัน

2
สร้างเซสชันของหน้าจอด้วยสคริปต์ทุบตีโดยใช้ contab
ฉันต้องการไฟล์ขวดที่จะทำงานทุกครั้งที่รองเท้าเซิร์ฟเวอร์ขึ้น (เรากำลังใช้ VPS) และดังนั้นผมจึงได้แก้ไข crontab ใช้แล้วเพิ่มcrontab -e @reboot bash /home/bash/startserver.shแต่ฉันไม่ได้ไปถึงจุดที่สคริปต์ทำงานเลย นี่คือสคริปต์ของฉัน: #!/bin/bash screen -S bukkit cd $HOME/server java -jar bukkit.jar เหตุผลที่ฉันต้องใช้screenคือเมื่อฉันเริ่ม bukkit.jar มันจะเข้าสู่คอนโซลที่ฉันสามารถป้อนคำสั่งเพิ่มเติมสำหรับโปรแกรมนั้นได้ (ฉันแน่ใจว่าคุณคุ้นเคยกับ Minecraft และเซิร์ฟเวอร์ในไซต์นี้แล้วก็ตาม ฮ่าฮ่า) แต่ฉันต้องสามารถทำคำสั่งอื่น ๆ ในฐานะรูทและสำหรับโปรแกรมอื่น ๆ ในขณะที่มันกำลังทำงานอยู่และปิดเซสชัน PuTTY ของฉันด้วย ปัญหาเดียวก็คือว่าเมื่อสคริปต์นี้จะดำเนินการจะสร้างเซสชั่นหน้าจอ แต่มัน ID ไม่ได้ระบุไว้ในscreen -lsขณะที่ประชาชนจะว่างเปล่า แต่ฉันต้องไป/run/screen/S-rootหารหัสแล้วใช้รหัสทั่วไปscreen -X -S $name quitกับมัน บางทีนี่อาจเป็นไปไม่ได้หรืออาจมีวิธีที่ง่ายกว่าในการทำเช่นนี้ (ฉันจะรักง่ายกว่า) แต่ฉันไม่สามารถเข้าใจได้ว่าทำไมสิ่งนี้ถึงไม่ทำงาน และถ้าเป็นไปได้มันเป็นไปได้ที่จะเข้าร่วมเซสชันด้วยscreen -S bukkitเมื่อรันสคริปต์ทุบตี? …

2
คำสั่ง Oneliner ใช้ kill กำหนดหมายเลขพอร์ต tcp แทน PID?
ฉันมักจะทำเช่น sudo netstat -lpn |grep :8088 ดูผลลัพธ์ tcp6 0 0 :::8088 :::* LISTEN 11189/java แล้ว sudo kill -kill 11189 ฉันต้องการคำสั่งที่สะดวกยิ่งขึ้นเหมือนกับkillatport 8088ที่ใช้หมายเลขพอร์ต tcp เป็นตัวแปรและฉันสามารถสร้างเป็นนามแฝงของไพพ์ไลน์ที่ทำในสิ่งที่ฉันต้องการได้ แต่ฉันจะรับ PID จากเอาต์พุตและไพพ์ได้อย่างไร ไปที่คำสั่ง kill หรือไม่? ฉันคิดว่าฉันอาจใช้ awk เพื่อรับ PID จากเอาต์พุตจาก netstat แต่ฉันจะป้องกันและสร้างพอร์ตที่ตรงกันได้อย่างไรเพื่อให้อินพุต 80 ไม่ตรงกับ 8080 และเช่นเดียวกัน ฉันควรทำให้โปรแกรม C เป็นโปรแกรมแทนหรือไม่ หรือมียูทิลิตี้ขนาดเล็กเช่นนี้แล้ว

1
ทำไม $ 0 ถูกตั้งค่าเป็น -bash
ชื่อกระบวนการเข้าสู่ระบบครั้งแรกดูเหมือนว่าจะถูกตั้งค่าให้-bashแต่ถ้าผม subshell bashแล้วมันจะกลายเป็น ตัวอย่างเช่น: root@nowere:~# echo $0 -bash root@nowere:~# bash root@nowere:~# echo $0 bash -bash กำลังทำให้สคริปต์บางตัวล้มเหลวเช่น . /usr/share/debconf/confmodule exec /usr/share/debconf/frontend -bash Can't exec "-bash": No such file or directory at /usr/share/perl/5.14/IPC/Open3.pm line 186. open2: exec of -bash failed at /usr/share/perl5/Debconf/ConfModule.pm line 59 ใครรู้เหตุผลว่าทำไมถึง$0ตั้งค่า-bash?

1
จะเชื่อมโยงแป้นพิมพ์ลัดที่กำหนดเองกับสคริปต์ทุบตีใน Ubuntu 13.04 ได้อย่างไร
ในฐานะผู้ใช้ Ubuntu 13.04 ฉันมีปัญหาและความไม่ลงรอยกันกับ Ubuntu รุ่นใหม่ล่าสุดนี้ หนึ่งในนั้นคือแถบความสว่างหายไปจากแท็บ 'การตั้งค่าระบบ -> ความสว่าง & ล็อค' ทันทีหลังจากฉันติดตั้งแพคเกจบางอย่าง (ซึ่งฉันจำไม่ได้ว่ามันคืออะไร) ผมพบว่าวิธีแก้ปัญหาคือการใช้xbacklight ในการออกกำลังกายสำหรับตัวเองฉันเขียนสคริปต์สั้น ๆ เพื่อเพิ่มและลดความสว่างโดยใช้ xbacklight จากเทอร์มินัล สคริปต์นี้ทำงานได้ (มีสิทธิ์ในการดำเนินการ) เป็นไดเรกทอรีที่รวมอยู่ใน $ PATH ในไฟล์. bashrc ของฉันและเชื่อมโยงกับนามแฝง ('blup' เพื่อเพิ่มและ 'bldn' เพื่อลดความสว่างของหน้าจอ) ดังนั้นสองนามแฝงของฉัน (blup / bldn) ทำงานได้อย่างสมบูรณ์แบบจากสายเทอร์มินัล ต่อไปฉันต้องการเชื่อมโยงสิ่งเหล่านี้กับแป้นพิมพ์ลัดบางตัว (เช่น F2 / F3) ฉันทำเช่นนั้นใน 'การตั้งค่าระบบ -> แป้นพิมพ์ -> ทางลัด -> ทางลัดที่กำหนดเอง' …

1
การดำเนินการสคริปต์เมื่อออกจากระบบของผู้ใช้ (ไม่ใช่ผู้ใช้รูท)
ฉันอยู่ในแล็บของมหาวิทยาลัยที่ใช้อูบุนตู 12.10 ด้วยความสามัคคีและฉันไม่มีสิทธิ์พิเศษรูท ฉันต้องเรียกใช้สคริปต์เมื่อออกจากระบบ เป็นไปได้ไหม หมายเหตุ: นี่อาจเป็นคำถามที่ซ้ำกันอย่างไรก็ตามคำตอบที่ให้นั้นค่อนข้างเป็นความลับและไม่มีการระบุทิศทางที่เฉพาะเจาะจง
8 scripts  root  logout 

3
วิธีที่เหมาะสมในการให้ผู้ใช้ป้อนรหัสผ่านสำหรับสคริปต์ทุบตีโดยใช้เฉพาะ GUI (ที่ซ่อนเทอร์มินัล)
ฉันได้สร้างสคริปต์ทุบตีที่ใช้ kdialog เฉพาะสำหรับการโต้ตอบกับผู้ใช้ มันถูกเปิดตัวจากไฟล์ ".desktop" เพื่อให้ผู้ใช้ไม่เคยเห็นเทอร์มินัล ดูเหมือน 100% เหมือนแอป GUI (แม้ว่าจะเป็นเพียงสคริปต์ทุบตี) มันทำงานใน KDE เท่านั้น (Kubuntu 12.04) ปัญหาเดียวของฉันคือจัดการรหัสผ่านให้ปลอดภัยและสะดวก ฉันไม่สามารถหาทางออกที่น่าพอใจ สคริปต์ได้รับการออกแบบให้รันในฐานะผู้ใช้ปกติและแจ้งให้ใส่รหัสผ่านเมื่อต้องการคำสั่ง sudo ก่อน ด้วยวิธีนี้คำสั่งส่วนใหญ่ที่ไม่ต้องการสิทธิ์ sudo จะถูกเรียกใช้ในฐานะผู้ใช้ปกติ เกิดอะไรขึ้น (เมื่อสคริปต์รันจากเทอร์มินัล) คือผู้ใช้จะได้รับพร้อมต์สำหรับรหัสผ่านของพวกเขาหนึ่งครั้งและการหมดเวลา sudo เริ่มต้นทำให้สคริปต์เสร็จสิ้นรวมถึงคำสั่ง sudo เพิ่มเติมโดยไม่ต้องแจ้งผู้ใช้อีกครั้ง นี่คือวิธีที่ฉันต้องการให้ทำงานเมื่อเรียกใช้ GUI ด้านหลัง ปัญหาหลักคือการใช้kdesudoเพื่อเปิดสคริปต์ของฉันซึ่งเป็นวิธี GUI มาตรฐานหมายความว่าสคริปต์ทั้งหมดจะถูกดำเนินการโดยผู้ใช้รูท ดังนั้นความเป็นเจ้าของไฟล์จึงถูกกำหนดให้กับผู้ใช้รูทฉันไม่สามารถพึ่งพา~/ในพา ธ ได้และสิ่งอื่น ๆ อีกมากมายนั้นน้อยกว่าอุดมคติ การรันสคริปต์ทั้งหมดในฐานะผู้ใช้รูทเป็นเพียงโซลูชันที่ไม่น่าพอใจและฉันคิดว่านี่เป็นวิธีปฏิบัติที่ไม่ดี ฉันขอขอบคุณแนวคิดใด ๆ ที่ให้ผู้ใช้ป้อนรหัสผ่าน sudo เพียงครั้งเดียวผ่านทาง GUI ในขณะที่ไม่ได้ใช้สคริปต์ทั้งหมดในฐานะที่เป็นรูท …
8 bash  scripts  sudo  gui  kde4 

3
เชลล์สคริปต์เพื่อเพิ่มพื้นที่เก็บข้อมูล apt แบบมีเงื่อนไข
ฉันต้องการเขียนเชลล์สคริปต์ที่จะเพิ่มที่เก็บ apt ฉันรู้ว่าฉันสามารถทำได้โดยใช้ sudo add-apt-repository -y <repo> คำถามของฉันคือฉันสามารถทำได้ก็ต่อเมื่อพื้นที่เก็บข้อมูลไม่ได้ถูกเพิ่มไปแล้วสิ่งที่ชอบ: if repo was not added yet: sudo add-apt-repository -y <repo> sudo apt-get update ขอบคุณ

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