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

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

2
awk '! a [$ 0] ++' ทำงานอย่างไร
หนึ่งซับนี้จะลบบรรทัดที่ซ้ำกันออกจากการป้อนข้อความโดยไม่ต้องเรียงลำดับล่วงหน้า ตัวอย่างเช่น: $ cat >f q w e w r $ awk '!a[$0]++' <f q w e r $ รหัสเดิมที่ฉันพบใน internets อ่านได้: awk '!_[$0]++' นี่เป็นสิ่งที่ทำให้ฉันงุนงงมากขึ้นเมื่อฉัน_มีความหมายพิเศษใน awk เช่นใน Perl แต่กลายเป็นชื่อของอาร์เรย์ ตอนนี้ฉันเข้าใจตรรกะเบื้องหลังหนึ่งซับ: แต่ละบรรทัดอินพุตถูกใช้เป็นคีย์ในอาร์เรย์แฮชดังนั้นเมื่อเสร็จสมบูรณ์แฮชจะมีบรรทัดที่ไม่ซ้ำกันตามลำดับการมาถึง สิ่งที่ฉันต้องการเรียนรู้คือสัญกรณ์นี้ตีความโดย awk ได้อย่างไร เช่นความหมายของสัญญาณบาง ( !) และองค์ประกอบอื่น ๆ ของข้อมูลโค้ดนี้ มันทำงานยังไง?

15
เชลล์เชิงอ็อบเจ็กต์สำหรับ * ระวัง
คำนำ: ฉันรักการทุบตีและไม่มีความตั้งใจที่จะเริ่มโต้เถียงหรือสงครามศักดิ์สิทธิ์และหวังว่านี่จะไม่ใช่คำถามที่ไร้เดียงสาอย่างยิ่ง คำถามนี้ค่อนข้างเกี่ยวข้องกับโพสต์นี้ใน superuser แต่ฉันไม่คิดว่า OP รู้จริง ๆ ว่าเขาขออะไร ฉันใช้ bash บน FreeBSD, linux, OS X และ cygwin บน Windows ฉันเคยมีประสบการณ์มากมายกับ PowerShell บน Windows เมื่อเร็ว ๆ นี้ มีเชลล์สำหรับ * nix, มีอยู่แล้วหรือในงานที่เข้ากันได้กับ bash แต่เพิ่มเลเยอร์ของสคริปต์เชิงวัตถุลงในมิกซ์หรือไม่ สิ่งเดียวที่ฉันรู้ว่าใกล้เข้ามาคือคอนโซลหลาม แต่เท่าที่ฉันสามารถบอกได้ว่ามันไม่ได้ให้การเข้าถึงสภาพแวดล้อมเชลล์มาตรฐาน ตัวอย่างเช่นผมไม่สามารถเพียงcd ~และlsจากนั้นchmod +x fileภายในคอนโซลหลาม ฉันจะต้องใช้หลามเพื่อทำงานเหล่านั้นมากกว่าไบนารียูนิกซ์มาตรฐานหรือโทรไบนารีโดยใช้รหัสหลาม มีเชลล์อยู่จริงหรือไม่?

9
มีคำสั่ง unix ที่ให้จำนวนขั้นต่ำ / สูงสุดของสองตัวเลข?
stdinผมกำลังมองหาคำสั่งไปยังหมายเลขวงเงินอ่านในจาก ฉันเขียนสคริปต์เล็กน้อยเพื่อจุดประสงค์นั้น (ยินดีต้อนรับคำติชม) แต่ฉันสงสัยว่าถ้าไม่มีคำสั่งมาตรฐานสำหรับเรื่องนี้ง่ายและ (ฉันคิดว่า) กรณีการใช้งานทั่วไป สคริปต์ของฉันซึ่งค้นหาอย่างน้อยสองตัวเลข: #!/bin/bash # $1 limit [ -z "$1" ] && { echo "Needs a limit as first argument." >&2; exit 1; } read number if [ "$number" -gt "$1" ]; then echo "$1" else echo "$number" fi

4
$ @ ยกเว้นอาร์กิวเมนต์ที่ 1
ฉันต้องเขียนเชลล์สคริปต์ที่ทำงานด้วยวิธีนี้: ./myscript arg1 arg2_1 arg2_2 arg2_3 ....... arg2_# มีการวนรอบสำหรับสคริปต์ภายใน for i in $@ อย่างไรก็ตามอย่างที่ทราบ $ @ ได้รวม $ 1 ถึง $ ($ # - 1) แต่สำหรับโปรแกรมของฉัน $ 1 แตกต่างอย่างชัดเจนจาก $ 2 $ 3 $ 4 ฯลฯ ฉันต้องการวนจาก $ 2 ถึงจุดสิ้นสุด ... ฉันจะทำสิ่งนี้ได้อย่างไร ขอขอบคุณ:)
36 bash  shell  scripting 

2
อัฒภาคในโครงสร้างที่มีเงื่อนไข
ทำไมใส่เครื่องหมายอัฒภาคไว้ในที่หนึ่งและไม่ใช่อีกอัน? ผลลัพธ์จะเหมือนกัน รหัสหนึ่ง if [ "a" == "a" ] then echo "true" fi รหัสสอง if [ "a" == "a" ]; then echo "true"; fi อัฒภาคในโค้ดที่สองนั้นไม่จำเป็นเลยเหรอ? เมื่อจำเป็นต้องใส่เครื่องหมายอัฒภาคหรือไม่
34 bash  scripting 

7
คำสั่ง Unix ใดที่สามารถใช้เป็นสัญญาณ / ล็อคได้
ฉันต้องการเรียกใช้สคริปต์เชลล์ Bash หลายชุดพร้อมกัน อย่างไรก็ตามฉันต้องการหลีกเลี่ยงสภาพการแข่งขัน คำสั่ง Unix ใดที่เป็นอะตอมมิกอย่างแท้จริงที่ฉันสามารถใช้เพื่อจุดประสงค์นี้และฉันจะใช้ได้อย่างไร

12
ใช้การแจ้งเตือน - ส่งด้วย cron
ฉันใช้ Arch Linux กับ KDE / Awesome WM ฉันพยายามที่จะได้รับ ในการทำงานด้วยnotify-sendcron ฉันได้ลองตั้งค่าDISPLAY/ XAUTHORITYตัวแปรและใช้งานnotify-sendด้วย "sudo -u" โดยไม่มีผลลัพธ์ ฉันสามารถโทรแจ้ง - ส่งแบบโต้ตอบจากเซสชันและรับการแจ้งเตือน FWIW งาน cron ทำงานได้ดีซึ่งฉันตรวจสอบโดยการสะท้อนสิ่งที่เป็นไฟล์ชั่วคราว มันเป็นเพียง "แจ้ง - ส่ง" ที่ล้มเหลวในการทำงาน รหัส: [matrix@morpheus ~]$ crontab -l * * * * * /home/matrix/scripts/notify.sh [matrix@morpheus ~]$ cat /home/matrix/scripts/notify.sh #!/bin/bash export DISPLAY=127.0.0.1:0.0 export XAUTHORITY=/home/matrix/.Xauthority echo "testing cron" …

7
มีการโต้แย้งหลายครั้งใน shebang
ฉันสงสัยว่ามีวิธีทั่วไปในการส่งตัวเลือกหลายตัวไปยังโปรแกรมที่เรียกใช้งานได้ผ่านทางสาย shebang ( #!) ผมใช้ NixOS และส่วนแรกของ shebang ในสคริปต์ใด ๆ /usr/bin/envที่ฉันเขียนมักจะ ปัญหาที่ฉันพบคือทุกสิ่งที่เกิดขึ้นหลังจากนั้นถูกตีความว่าเป็นไฟล์หรือไดเรกทอรีเดียวโดยระบบ ตัวอย่างเช่นสมมติว่าฉันต้องการเขียนสคริปต์ที่จะดำเนินการโดยbashในโหมด posix วิธีที่ไร้เดียงสาของการเขียน Shebang จะเป็น: #!/usr/bin/env bash --posix แต่พยายามที่จะรันสคริปต์ผลลัพธ์จะสร้างข้อผิดพลาดต่อไปนี้: /usr/bin/env: ‘bash --posix’: No such file or directory ฉันทราบเกี่ยวกับโพสต์นี้แต่ฉันสงสัยว่ามีวิธีการทั่วไปที่สะอาดกว่าหรือไม่ แก้ไข : ฉันรู้ว่าสำหรับสคริปต์Guileมีวิธีการบรรลุสิ่งที่ฉันต้องการบันทึกไว้ในส่วน 4.3.4ของคู่มือ: #!/usr/bin/env sh exec guile -l fact -e '(@ (fac) main)' -s "$0" "$@" !# เคล็ดลับที่นี่ก็คือบรรทัดที่สอง (เริ่มต้นด้วยexec) …

1
apt-get install โดยไม่ต้องมี debconf prompt
ฉันต้องการติดตั้งพ่อครัวผ่าน apt แบบไม่โต้ตอบ แต่โดยค่าเริ่มต้นการติดตั้ง apt จะแสดงพรอมต์นี้: มีวิธีข้ามขั้นตอนนี้ในระหว่างการติดตั้งหรือส่งค่าไปยัง apt install หรือไม่ ฉันใช้ Chef-solo เพียงอย่างเดียวดังนั้นจึงไม่จำเป็นต้องใช้องค์ประกอบเซิร์ฟเวอร์จริงๆดังนั้นเพียงแค่กด Return บนหน้าจอนี้
31 scripting  apt  debconf 

7
อะไรคือสิ่งที่เทียบเท่ากับ && เมื่อเขียนสคริปต์ทุบตี
ฉันต้องขออภัยล่วงหน้าหากนี่เป็นคำถามที่ซ้ำกัน ฉันพยายามค้นหา / ตรวจสอบก่อนถามที่นี่ ฉันรู้สึกสะดวกสบายกับการเขียนหนึ่ง liners เช่นนี้: foocommand && foocommand2 && foocommand3 แนวคิดที่ว่าฉันต้องการเพียงคำสั่งที่ตามมาเท่านั้นที่จะทำงานหากคำสั่งก่อนหน้านี้ "สำเร็จ" ฉันกำลังเขียนสคริปต์ที่ค่อนข้างยาวและหนึ่งบรรทัดนี้เป็นไปไม่ได้เพราะมันดูเหมือนว่าจะทำให้ผู้อื่นสับสนรหัสขนาดใหญ่ ฉันต้องการเว้นวรรคคำสั่งและเขียนความคิดเห็นไว้ในสคริปต์ ฉันจะทำสิ่งนี้และยังคงเทียบเท่า && อยู่ได้อย่างไร
31 bash  centos  scripting 

4
การจัดตำแหน่งสคริปต์ Bash shell
สคริปต์ของฉัน: date echo -e "${YELLOW}Network check${NC}\n\n" while read hostname do ping -c 1 "$hostname" > /dev/null 2>&1 && echo -e "Network $hostname : ${GREEN}Online${NC}" || echo -e "${GRAY}Network $hostname${NC} : ${RED}Offline${NC}" done < list.txt sleep 30 clear done กำลังแสดงผลข้อมูลเช่นนี้: Network 10.x.xx.xxx : Online Network 10.x.xx.xxx : Offline Network 10.x.xx.xxx : …

4
จะสร้างไฟล์ชั่วคราวใน RAM ได้อย่างไร?
|tee scriptnameYYMMDD.txtฉันมีสคริปต์ที่จะท่อส่งออกไปยัง หลังจากแต่ละรอบของ for for loop ที่สร้างเอาต์พุตขึ้นมาฉันจะย้อนกลับเนื้อหาไฟล์ด้วยtac scriptnameYYYYMMDD.txt > /var/www/html/logs/scriptname.txtเพื่อให้สามารถเห็นเอาต์พุตบันทึกในหน้าต่างเบราว์เซอร์ที่มีบรรทัดใหม่ล่าสุดอยู่ด้านบน ฉันจะมีสคริปต์หลายตัวที่ทำสิ่งนี้ควบคู่กัน ฉันพยายามลดกิจกรรมของดิสก์ให้น้อยที่สุดดังนั้นผลลัพธ์จาก|tee scriptnameYYYYMMDD.txtRAMdisk จะดีที่สุด mktempสร้างไฟล์ใน/tmpโฟลเดอร์ แต่ไม่ปรากฏว่าเป็นดิสก์

6
วิธีรันคำสั่ง ssh จนกว่าจะสำเร็จ
บางครั้งฉันรีสตาร์ทอุปกรณ์และจำเป็นต้องsshกลับเข้ามาใหม่เมื่อพร้อม ฉันต้องการเรียกใช้คำสั่ง ssh ทุก 5 วินาทีจนกระทั่งคำสั่งสำเร็จ ความพยายามครั้งแรกของฉัน: watch -n5 ssh me@device.local && exit 1 ฉันจะทำสิ่งนี้ได้อย่างไร
28 ssh  scripting  watch 

2
คัดลอกภาพจากคลิปบอร์ดไปยังไฟล์
เป็นไปได้ไหมที่จะนำภาพจากคลิปบอร์ดและส่งออกไปยังไฟล์ (ใช้ X)? ฉันสามารถทำสิ่งนี้ด้วยข้อความได้อย่างง่ายดาย: $ xclip -selection c -o > file.text แต่เมื่อฉันลองด้านบนด้วยภาพไม่มีอะไรเขียน เหตุผลที่ฉันต้องการทำสิ่งนี้คือฉันไม่ได้ติดตั้งโปรแกรมแก้ไขภาพและฉันคิดว่าฉันสามารถทำได้โดยไม่ติดตั้ง

3
วิธีบันทึกเซสชันเทอร์มินัลทั้งหมดโดยอัตโนมัติด้วยยูทิลิตี้สคริปต์
สิ่งที่ฉันต้องการบรรลุคือสามารถบันทึกเซสชันเทอร์มินัลของฉันให้เป็นไฟล์โดยอัตโนมัติเมื่อใดก็ตามที่ฉันใช้ Yakuake / Konsole เป็นเรื่องง่ายที่จะประสบความสำเร็จหากเริ่มเซสชันของฉัน: script -f /home/$USER/bin/shell_logs/$(date +"%d-%b-%y_%H-%M-%S")_shell.log แต่ฉันต้องการเรียกใช้ข้างต้นโดยอัตโนมัติเมื่อใดก็ตามที่ฉันเริ่ม Yakuake หรือเปิดแท็บใหม่ การใช้. bashrc ไม่ทำงานเนื่องจากสร้างลูปไม่สิ้นสุดเนื่องจาก 'สคริปต์' เปิดเซสชันใหม่ซึ่งจะอ่าน. bashrc และเริ่มต้นอีก 'สคริปต์' และอื่น ๆ ดังนั้นฉันจึงต้องเขียนสคริปต์ Yakuake / Konsole เพื่อเรียกใช้ 'สคริปต์' ครั้งหนึ่งเมื่อเปิดแท็บใหม่ คำถามคืออย่างไร

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