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

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

4
สภาพแวดล้อมแบบเชลล์สำหรับการประมวลผลแบบไบนารี
คำถามนี้มาถึงฉันสองสามครั้งก่อนตอนนี้ในการตอบสนองต่อคำถาม วนผ่านชิ้นข้อมูลไบนารีจาก stdin ใน คำตอบBashให้ใน/programming/993434/what-language-is-to-binary -as-perl-is-to-textก็ไม่พอใจเช่นกัน ฉันกำลังมองหาสภาพแวดล้อมการเขียนสคริปต์ที่เหมาะสมโดยเฉพาะเพื่อจัดการ I / O กับไฟล์ไบนารี ฉันรู้ว่าฉันสามารถใช้หนึ่งในภาษาการเขียนโปรแกรมอย่างเต็มรูปแบบ (c / Python / ... ) แต่พวกเขามีการเริ่มต้นและการเข้ารหัสค่าใช้จ่ายมหาศาล (การจัดสรรและ fread / fwrite ใน c, bitstrings ใน Python ... ) ไม่ต้องพูดถึง มันเหมาะสำหรับการเขียนสคริปต์น้อยกว่า (เรียกแอปพลิเคชันอื่นจากมัน) Perl นั้นไม่ได้ดีไปกว่าunpackฟังก์ชั่นการใช้งานของสตริง สิ่งที่ชอบodแต่เป็นภาษา สิ่งที่ฉันคาดหวัง: ตั้งค่าหรือเปลี่ยน endianness ด้วยสวิตช์ / คำสั่งเดียว สเปคที่เรียบง่ายของประเภทร้องขอ (บางอย่างเช่นการขยายทุบตีread varด้วยint32 var, float varฯลฯ ) การจัดการของไบนารีผ่านท่อข้ามจำนวนไบต์ที่ระบุ …

3
เมื่อใดที่จะใช้การเปลี่ยนเส้นทางไปยัง stderr ในเชลล์สคริปต์
ฉันรู้ว่าโปรแกรมอรรถประโยชน์ที่ทำงานได้ดีเช่นข้อความgrep "ปกติ" ไปยัง stdout และข้อความแสดงข้อผิดพลาดไปยัง stderr $ grep '^foo' file1 file2 file1:foo grep: file2: No such file or directory เมื่อฉันเขียนเชลล์สคริปท์ตัวเองฉันมักจะพบว่ามันยากที่จะตัดสินใจว่าเอาต์พุตใดและข้อความใดที่ฉันควรแสดงบน stderr หรือถ้าฉันควรจะใส่ใจ ฉันต้องการทราบเกี่ยวกับแนวปฏิบัติที่ดี: เมื่อใดที่มีการเปลี่ยนเส้นทางข้อความไปยัง stderr ที่ถูกเรียกร้องและสมเหตุสมผลและเมื่อใด "ขึ้นอยู่กับ" แน่นอน แต่คุณมีความเข้าใจที่จะช่วยฉันตัดสินใจเหล่านี้หรือไม่ เพื่อให้คำถามอัตนัยนี้สอดคล้องกับรูปแบบฉันต้องการสนับสนุนคำตอบที่ตอบว่า "ทำไม" และได้รับการแจ้งจากประสบการณ์และหากได้รับการสนับสนุนจากข้อเท็จจริง

9
แตกไฟล์ zip ที่ซ้อนกัน
ฉันมีไฟล์เก็บถาวร zip จำนวนมากซึ่งแต่ละไฟล์มีไฟล์เก็บถาวร zip จำนวนหนึ่ง วิธีที่ดีที่สุดในการแยกไฟล์ทั้งหมดที่มีอยู่ในไฟล์ zip นี้และไฟล์เก็บถาวรของไฟล์ย่อยคือ recursively คืออะไร?
15 files  scripting  zip 

3
วิธีรับระดับเสียงจากบรรทัดคำสั่ง?
ฉันมีแถบสถานะข้อความในตัวจัดการหน้าต่างแบบเรียงต่อกันและฉันใช้ tcl เพื่อป้อนข้อมูล ในขณะที่ฉันต้องการบรรทัดคำสั่งที่ส่งออกระดับเสียง 0% ถึง 100% ฉันใช้ Arch Linux

3
มีวิธีการจำลองเหตุการณ์“ ปิด” บนหน้าต่างต่าง ๆ โดยใช้เทอร์มินัลหรือไม่?
ฉันตอบไปที่ถาม Ubuntu ออกจากอินสแตนซ์ทั้งหมดของgnome-terminalผ่านทางคำสั่งแต่ในขณะที่คุณทุกคนสามารถอ่านgnome-terminalดูเหมือนจะไม่ได้มีการSIGโทรฉันสามารถใช้เพื่อจำลองเหตุการณ์ "ปิด" นี้ ดังนั้นสิ่งนี้ทำให้ฉันถามว่ามีวิธีใดใน GNOME / KDE / LXDE / {ให้หน้าต่าง / ผู้จัดการเดสก์ท็อป / สภาพแวดล้อมของคุณที่นี่} เพื่อจำลองเหตุการณ์ "คลิกที่ปุ่มปิด" หรือไม่? ฉันได้อ่าน คำถามต่าง ๆ ที่อาจเกี่ยวข้องกับเรื่องนี้ แต่ไม่ตอบคำถามนี้ สิ่งที่ฉันกำลังมองหาคือคำสั่งทั่วโลก (ถ้ามี) เพื่อทำสิ่งนี้ในสถานการณ์ที่แตกต่างกัน หากไม่มีอยู่โปรดอธิบายว่าปุ่ม "ปิด" ทำงานอย่างไร การใช้ประโยชน์: ฉันเปิดชุดแอปพลิเคชันสำหรับงานที่กำหนดแล้วและต้องการปิดแอปพลิเคชั่นทั้งหมด (เมื่อไม่ได้ใช้งาน) ในคำสั่งจังหวะ / คำสั่งเดียวโดยไม่กดปุ่มใด ๆคุณต้องการบันทึกงานของคุณหรือไม่ การแจ้งเตือน ปิดgnome-terminalอินสแตนซ์ทั้งหมดแต่เตือนฉันหากยังมีกระบวนการลูกที่ยังทำงานอยู่ ตอนนี้ไม่มีอะไรเข้ามาในความคิดของฉัน ...

3
Bash เกิดข้อผิดพลาดบรรทัดที่ 8: $ 1: ตัวแปรที่ไม่ถูกผูก
ฉันพยายามที่จะเรียนรู้วิธีใช้ getopts เพื่อที่ฉันจะได้สคริปต์ที่มีการวิเคราะห์คำ (แม้ว่าฉันคิดว่า getopts น่าจะดีกว่า) ฉันพยายามเขียนสคริปต์ง่าย ๆ เพื่อคืนค่าเปอร์เซ็นต์การใช้งานพาร์ติชัน ปัญหาคือว่าหนึ่งในฟังก์ชั่นทุบตีของฉันดูเหมือนจะไม่ชอบที่ฉันอ้างอิง$1เป็นตัวแปรภายในฟังก์ชั่น เหตุผลที่ฉันอ้างอิง$1เป็นเพราะget_percentฟังก์ชั่นสามารถส่งผ่านจุดเมานท์เป็นอาร์กิวเมนต์เพิ่มเติมเพื่อแสดงแทนจุดเมานท์ทั้งหมด สคริปต์ #!/usr/bin/bash set -e set -u set -o pipefail get_percent(){ if [ -n "$1" ] then df -h $1 | tail -n +2 | awk '{ print $1,"\t",$5 }' else df -h | tail -n +2 | awk '{ …

2
Shebang นี้เริ่มต้นด้วยเครื่องหมายขีดคั่นคู่ (-) อย่างไร
ฉันได้พบ shebang ประเภทต่อไปนี้ในหน้า RosettaCode: --() { :; }; exec db2 -txf "$0" มันใช้งานได้สำหรับ Db2 และสิ่งที่คล้ายกันสำหรับ Postgres อย่างไรก็ตามฉันไม่เข้าใจทั้งบรรทัด ฉันรู้ว่าเส้นประสองครั้งเป็นความคิดเห็นใน SQL และหลังจากนั้นมันเรียกการปฏิบัติการ Db2 ด้วยพารามิเตอร์บางตัวที่ส่งไฟล์ตัวเองเป็นไฟล์ แต่สิ่งที่เกี่ยวกับวงเล็บวงเล็บปีกกาลำไส้ใหญ่และเซมิโคลอนและวิธีสามารถแทนที่ shebang # จริง! ? https://rosettacode.org/wiki/Multiline_shebang#PostgreSQL

3
สคริปต์เริ่มต้นของ Systemd postgresql
ฉันกำลังติดตั้ง postgresql บนเซิร์ฟเวอร์ตัวที่สอง ก่อนหน้านี้ฉันติดตั้ง postgresql แล้วใช้สคริปต์ที่ให้มา ./contrib/start-scripts/linux วางลงใน dir ที่ถูกต้อง # cp ./contrib/start-scripts/linux /etc/rc.d/init.d/postgresql92 # chmod 755 /etc/rc.d/init.d/postgresql92 ซึ่งฉันสามารถดำเนินการตามที่คาดไว้ด้วย # service postgresql92 start อย่างไรก็ตามเครื่องใหม่ใช้ Systemd และดูเหมือนว่ามีวิธีที่แตกต่างอย่างสิ้นเชิงในการทำเช่นนี้ ฉันไม่ต้องการแฮ็คข้อมูลนี้และทำลายบางสิ่งบางอย่างดังนั้นฉันจึงสงสัยว่าใครก็ตามสามารถชี้ให้ฉันในทิศทางที่ถูกต้องว่าจะบรรลุผลลัพธ์เดียวกันได้อย่างไร

3
ฉันจะทำ N-way diff ได้อย่างไร
ฉันจะกระจายเอาต์พุตของหลายคำสั่งได้อย่างไร vimdiffสามารถรองรับไฟล์ได้สูงสุดสี่ไฟล์ แต่diffดูเหมือนว่าจะรองรับไฟล์ได้สองไฟล์ เป็นไปได้โดยตรงกับตัวแปรบางอย่างdiffหรือฉันต้องบันทึกผลลัพธ์ของคำสั่งทั้งหมดไปยังไฟล์ชั่วคราวเลือกหนึ่งและกระจายส่วนที่เหลือด้วยหรือไม่ บริบท: ฉันต้องตรวจสอบผลลัพธ์ของคำสั่งบางอย่างบนเซิร์ฟเวอร์หลายเครื่องและดูว่าพวกเขาทั้งหมดเห็นด้วยหรือไม่ ในขณะนี้เพียงรายงานว่าพบความแตกต่างใด ๆ ที่ดูเหมือนว่าดี แต่ถ้าเป็นไปได้ฉันอยากจะบอกว่า: เซิร์ฟเวอร์ X% เห็นด้วยซึ่งกันและกัน Y% ต่อกัน หรือเซิร์ฟเวอร์ Z นั้นเป็นเลขคี่ ฉันมีการตั้งค่า LDAP แบบหลายทางสี่ทางและฉันต้องการตรวจสอบว่าContextCSNค่าสำหรับทั้งสี่เห็นด้วยกัน ดังนั้นตอนนี้ฉัน: #! /bin/bash for i in {1..4}.ldap do ldapsearch -x -LLL -H ldap://$i -s base -b dc=example,dc=com contextCSN > $i.csn; done set -e for i in {2..4} do diff …
14 scripting  diff 

7
วิธีลบบรรทัดว่างหลายบรรทัดออกจากไฟล์ได้อย่างไร
ฉันมีบางข้อความไฟล์ผมใช้ในการจดบันทึกใน - cat >> fileข้อความธรรมดาเพียงมักจะเพียงแค่ใช้ บางครั้งฉันใช้บรรทัดว่างหรือสอง (แค่กลับ - ตัวอักษรขึ้นบรรทัดใหม่) เพื่อระบุหัวเรื่อง / บรรทัดความคิดใหม่ ในตอนท้ายของแต่ละเซสชันก่อนที่จะปิดไฟล์ด้วยCtrl+ Dฉันมักจะเพิ่มบรรทัดว่าง (5-10) บรรทัด (ปุ่มย้อนกลับ) จำนวนมากเพื่อแยกเซสชัน เห็นได้ชัดว่านี่ไม่ฉลาดมาก แต่ใช้งานได้สำหรับฉันเพื่อจุดประสงค์นี้ ฉันไม่แต่สิ้นสุดขึ้นกับจำนวนมากและจำนวนบรรทัดที่ว่างเปล่าที่ไม่จำเป็นดังนั้นฉันกำลังมองหาวิธีที่จะลบ (ส่วนใหญ่) สายพิเศษ มีคำสั่ง Linux (ตัด, วาง, grep, ... ?) ที่สามารถใช้โดยตรงกับตัวเลือกไม่กี่? อีกวิธีหนึ่งไม่มีใครมีความคิดสำหรับ sed, awk หรือ perl (ดีในภาษาสคริปต์ใด ๆ จริง ๆ แม้ว่าฉันจะชอบ sed หรือ awk) สคริปต์ที่จะทำสิ่งที่ฉันต้องการ? เขียนอะไรบางอย่างใน C ++ (ซึ่งจริง ๆ …
14 scripting  sed  awk  perl  filter 

6
วิธีการส่งคำสั่งหลายคำสั่งเพื่อ SFTP โดยใช้หนึ่งบรรทัด
คำสั่งต่อไปนี้ส่งคำสั่งเดียวไปยังการsftpใช้หนึ่งบรรทัด: sftp -o PasswordAuthentication=no user@host" <<<"lcd /home" วิธีส่งหลายบรรทัดเพื่อsftpใช้หนึ่งบรรทัด มีวิธีแทรกการขึ้นบรรทัดใหม่หรือบางสิ่งเพื่อให้ได้เช่น: sftp -o PasswordAuthentication=no user@host" <<<"lcd /home\n cd /myhome\n get file" แนวคิดคือไม่ใช้sftp -bตัวเลือกที่โหลดคำสั่งรายการไฟล์ภายนอก
14 scripting  sftp 

1
ความสามารถในการใช้งานในสคริปต์โดยไม่ต้อง setcap'ing ล่ามไบนารี?
ตอนนี้ฉันกำลังใช้cap_net_bind_service MY_USERNAMEใน /etc/security/capability.conf ตอนนี้ผมก็ต้องชุดcap_net_bind_service+iล่ามภาษาสคริปต์ที่ชื่นชอบเพื่อให้สามารถที่จะเพิ่มCAP_NET_BIND_SERVICEไปที่มีประสิทธิภาพชุดผ่าน libcap [-ng] ใช้งานได้ดี แต่ฉันสงสัยว่ามีวิธีการที่จะบรรลุสิ่งเดียวกันโดยไม่ต้องตั้งค่าตัวพิมพ์ใหญ่ใด ๆ ให้เป็นล่ามไบนารี ในขณะที่มันไม่ใช่ปัญหาใหญ่ (บัญชีผู้ใช้อื่นไม่มีขีด จำกัด ดังนั้นพวกเขาจึงไม่สามารถใช้งานได้แม้จะมีการตั้งค่าบิตในตัวแปลไบนารี่) มันค่อนข้างน่ารำคาญเนื่องจากฉันต้องตั้งค่าสถานะใหม่ทุกครั้งที่ล่ามเป็น อัปเดต

5
ต้องการวนรอบการนอนหลับเป็นเสี้ยววินาที
ในเครื่องของฉันฉันต้องดำเนินการรอบที่วนซ้ำ 1 คำสั่งง่ายๆที่จะต้องมีความล่าช้าแสดงในเสี้ยววินาที สมมติว่าฉันต้องการ: เพื่อบันทึกไฟล์ด้วย enumaration ที่เพิ่มขึ้น (file-0, file-1, file-2, ... ) สร้างโดยสิ่งเล็กน้อยสำหรับตัวอย่างนี้เช่น time > file-$x ฉันต้องทำเช่นนี้ทุกๆ 1/70 ของวินาที (เป็นตัวอย่าง) เพราะฉันต้องการแสดงเวลาของฉันด้วยเศษส่วนของวินาที ฉันจะแม่นยำและมีทุกอย่างแสดงออกด้วยสคริปต์ทุบตีได้อย่างไร เศษส่วนสามารถสร้างปริมาณที่กำหนดไม่ได้ฉันต้องแม่นยำและต้องมีทศนิยมอย่างน้อย 4-5 ตำแหน่ง
14 bash  scripting 

4
ดำเนินการคำสั่งในการเชื่อมต่อ SFTP ผ่านสคริปต์
นี่เป็นคำถามพื้นฐานที่ฉันเพิ่งจะค่อนข้างใหม่ในการทุบตีและไม่สามารถหาวิธีการทำเช่นนี้ได้ Googling น่าเสียดายที่ไม่ได้รับฉันทุกที่ เป้าหมายของฉันคือการเชื่อมต่อกับ sftp ไปยังเซิร์ฟเวอร์อัปโหลดไฟล์แล้วตัดการเชื่อมต่อ ฉันมีสคริปต์ต่อไปนี้: UpdateJar.sh #!/bin/bash sftp -oPort=23 kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins #Change directory on server #cd /home/kalenpw/TestWorld/plugins #Upload file put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar exit ปัญหาคือสคริปต์นี้จะสร้างการเชื่อมต่อ SFTP แล้วไม่ทำอะไรเลย เมื่อฉันพิมพ์ exit ในการเชื่อมต่อด้วยตนเองพยายามที่จะดำเนินการคำสั่ง put แต่เนื่องจากเซสชั่น sftp ถูกปิดเพียงแค่พูดว่า put: ไม่พบคำสั่ง ฉันจะทำให้เรื่องนี้ทำงานได้อย่างถูกต้องได้อย่างไร? ขอบคุณ

5
จะพิมพ์ชื่อสคริปต์ของตัวเองใน mawk ได้อย่างไร?
ใน bash $0มีชื่อของสคริปต์ แต่ใน awk ถ้าฉันทำสคริปต์ชื่อ myscript.awk ด้วยเนื้อหาต่อไปนี้: #!/usr/bin/awk -f BEGIN{ print ARGV[0] } และเรียกใช้มันจะพิมพ์ "awk" เท่านั้น นอกจากนี้ ARGV [i] กับ i> 0 ยังใช้สำหรับอาร์กิวเมนต์ของสคริปต์ในบรรทัดคำสั่งเท่านั้น ดังนั้นวิธีที่จะทำให้มันพิมพ์ชื่อของสคริปต์ในกรณีนี้ "myscript.awk"?
13 awk  scripting  mawk 

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