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

การทำสคริปต์ Bash กำลังสร้างสคริปต์ในภาษา Bash shell

2
ผนวก dir ไปที่ PATH
ฉันพยายามที่จะ localy เพิ่ม dir ให้กับ$PATHตัวแปรทั่วโลก .bashrcฉันจะเพิ่มต่อไปนี้เพื่อฉัน export PATH=$PATH:$VRS/bin แต่PATHดูเหมือนว่าจะได้รับการเชื่อมต่อกับตัวเองซ้ำแล้วซ้ำอีกทุกครั้งที่ฉันเปิดเปลือก (เช่นการPATHเจริญเติบโต) ความคิดใด ๆ

2
ไม่สามารถเรียกใช้“ mysql”: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าวโดยใช้ autoexpect
ฉันมีไฟล์ต่อไปนี้: exp.exp #!/usr/bin/expect db_host='localhost' db_name='webui_dev' db_user='root' db_pass='rootpass' new_db_name='db_2011' expect <<EOF log_user 0 spawn mysql -h $db_host -u $db_user -p $db_pass 'create database $new_db_name' expect "password:" send "$db_pass\r" log_user 1 expect eof EOF ฉันทำให้มันใช้งานได้โดย sudo chmod +x script/year_changer/create_db.expแต่ถ้าฉันพยายามที่จะดำเนินการฉันได้รับข้อผิดพลาด: couldn't execute "mysql": no such file or directory while executing "spawn mysql -h …

1
เอาต์พุต awk พิมพ์ไปยังสองไฟล์แยกกัน
นี่คือรหัสปัจจุบันของฉัน md5sum filename.iso | awk '{print $1} {print $2}' มันให้สองบรรทัดแยกกัน บรรทัดแรกคือ md5 ของไฟล์และบรรทัดที่สองคือชื่อของไฟล์ ฉันต้องการบันทึก md5 เป็น md5.txt และชื่อไฟล์ไปที่ name.txt ผลลัพธ์ของ md5sum คือxxxxxxx filename

1
ทุบตีค้นหารายการไฟล์ที่เก็บถาวรด้วย wildcard ในขณะวนซ้ำ
ฉันมีไฟล์ข้อความสองสามพัน gzipped ในไดเรกทอรีย่อยที่แตกต่างกันและใช้ชุดย่อยของไฟล์เหล่านี้เป็นอินพุตสำหรับโครงการเมื่อไม่กี่ปีที่ผ่านมา ย้อนกลับไปฉันมีสำเนาของไฟล์ที่ฉันใช้จริงในไดเรกทอรีเดียว แต่ได้ลบไฟล์นี้แล้วเก็บเฉพาะรายการไฟล์ที่คลายซิปเหล่านี้ในโฟลเดอร์นั้น นี่เป็นความคิดเริ่มต้นของฉันLISTคือรายการไฟล์ PARENTDIRเป็นไดเร็กทอรีระดับบนซึ่งไฟล์ทั้งหมดอยู่ในไดเร็กทอรีย่อยต่างๆ แนวคิดก็คือการค้นหาจดหมายเหตุทั้งหมดในไดเรกทอรีย่อยใด ๆ ที่พวกเขาเป็นและ gunzip พวกเขาไปNEWDIR #!/usr/bin/env bash LIST="listfile.txt" PARENTDIR="/home/user/old/project" NEWDIR="/home/user/old/project/2016" while read line; do ARCHIVE="$(find $PARENTDIR -name "$line*")" gunzip --stdout $ARCHIVE >$NEWDIR/$line done <$LIST ฉันดูเหมือนจะไม่ได้รับคำสั่ง find มันทำงานได้โดยไม่ต้องใช้ตัวแปร แต่ไม่ใช่กับแม้จะไม่มีการทดแทนคำสั่งเรียกใช้บรรทัดคำสั่ง การรวมราคาและบัตรเสริมของฉันไม่ถูกต้อง แต่ฉันไม่สามารถทำให้ถูกต้องการขยายตัวที่หลากหลายไม่ได้ช่วยอะไรและฉันคิดว่าฉันติดอยู่ ...

1
เรียกใช้ฟังก์ชันของไฟล์ที่มาในสคริปต์ทุบตี
ฉันมีไฟล์ bash src-useful.bashซึ่งมีฟังก์ชั่นที่มีประโยชน์เช่นsay_hello()ตั้งอยู่ใน / path / to / มีประโยชน์ ในฉัน~/.bash_profileฉันเพิ่มบรรทัดต่อไปนี้: export BASH_USEFUL=/path/to/useful source $BASH_USEFUL/src-useful.bash การเปิดเทอร์มินัลใหม่ฉันสามารถตรวจสอบสิ่งต่อไปนี้: $ echo $BASH_USEFUL /path/to/useful $ cat $BASH_USEFUL/src-useful.bash function hello() { echo "hello!" } $ hello hello! ฉันสร้างสคริปต์say_hello.sh: $ cat say_hello.sh echo "BASH_USEFUL: $BASH_USEFUL" hello $ ./say_hello.sh BASH_USEFUL: /path/to/useful # Recognizsed say_hello.sh: line 2: say_hello: command …

0
มีวิธีการเปิดใช้งานการเติมข้อความอัตโนมัติของ Bash แบบฟัซซี่อย่างที่ Intellij มีหรือไม่?
ฉันใช้ Intellij มากและหนึ่งในคุณสมบัติที่ฉันชอบคือการเติมข้อมูลอัตโนมัติ สังเกตว่าคุณสามารถข้ามตัวอักษรในอินพุตของคุณและเดาสิ่งที่คุณต้องการโดยใช้ตัวอักษรเหล่านั้น: มีวิธีการเปิดใช้งานการเติมข้อมูลอัตโนมัติประเภทนี้ใน Bash หรือไม่? ฉันเปิดใช้งานbash-completion แล้วแต่ใช้งานได้เฉพาะกับการพิมพ์ในส่วนนำหน้าของสิ่งที่คุณไม่ใช้ไม่ใช่อินพุตที่ไม่สมบูรณ์เช่นในรูปภาพ

0
Rsync ไม่ทำอะไรเลยถ้าไฟล์ไม่เปลี่ยนแปลง
#!/bin/sh date=`date "+%Y-%m-%dT%H:%M:%S"` rsync -aP --link-dest=/target/current '/source/folder' /target/back-$date rm -f /target/Backups/current ln -s back-$date /target/current นี่เป็นสคริปต์เล็กน้อยที่ฉันได้รับจากอินเทอร์เน็ตและปรับเปลี่ยนเล็กน้อย สคริปต์นี้ทำงานใน crontab ของฉันทุก 5 นาที จุดของสคริปต์นี้คือการรับไฟล์ประวัติ / เวลาเครื่อง -his ฉันได้รับรายชื่อสแน็ปช็อตในโฟลเดอร์สำรองทุกห้านาที (เช่นทุกครั้งที่สคริปต์ทำงาน) สิ่งนี้ใช้งานได้ดี มีข้อเสียอย่างหนึ่งคือ: หากไม่มีไฟล์ที่เปลี่ยนแปลงมันจะยังคงทำงานและสร้างสแนปชอตอย่างสมบูรณ์ เป็นไปได้หรือไม่ที่จะทำการแก้ไขเพื่อที่จะถ่ายภาพรวมที่เกิดขึ้นจริงเท่านั้นหากมีการเปลี่ยนแปลงไฟล์? ฉันรู้ว่ามันไม่ใช้พื้นที่ใด ๆ แต่มันทำให้โฟลเดอร์สำรองของฉันค่อนข้างเล็ก

1
ทำไมสคริปเรียบง่ายของฉันไม่ทำงาน
ฉันแค่เขียน Bash script ง่ายๆบน CentOS 6.2: [root@hadoop1 ~]# vi bash_startup #! /bin/bash export r=1 กลับไปที่บรรทัดคำสั่ง: และทำงานโดยใช้. /bash_startup [root@hadoop1 ~]# echo $r [root@hadoop1 ~]# เสียงสะท้อน $r ให้ผลลัพธ์กับฉันทำไม

2
จะใช้ github ผ่าน HTTPS ได้อย่างไร?
ฉันพยายามทำสิ่งนี้เพื่อสร้างเว็บไซต์ HTML แบบคงที่โดยใช้ github ฉันสร้างที่เก็บชื่อแล้ว: "GITHUBUSERNAMEANDREPO" #!/bin/bash git config --global user.name "GITHUBUSERNAMEANDREPO" git config --global user.email "mymailthatisregisteredtogithub@foo.com" mkdir GITHUBUSERNAMEANDREPO cd GITHUBUSERNAMEANDREPO echo thisisatest > index.html git init git add . git commit -m "upgrade" git remote add mainsite "https://GITHUBUSERNAMEANDREPO@github.com/GITHUBUSERNAMEANDREPO.github.io.git" git remote -v git push mainsite master เมื่อฉันเรียกใช้สคริปต์นี้ฉันจะได้รับป๊อปอัปภายใต้ RHEL 6.6 Desktop …


3
BASH: ค้นหาพาร์ติชันจากเอาต์พุต diskutil
ฉันกำลังพยายามค้นหาผลลัพธ์ของคำสั่งที่แสดงรายการไดรฟ์ในเครื่องเพื่อค้นหาพาร์ติชันที่เรียกว่า EFI ในบูต HDD ฉันได้เขียน oneliner ที่สกปรกจริงๆเพราะฉันไม่สามารถหาวิธีที่จะหา HDD หลักได้อย่างมีประสิทธิภาพ (น่าจะเป็น Macintosh HD เสมอ) จากนั้นหาสิ่งที่พาร์ติชัน EFI ในไดรฟ์เดียวกันจากนั้นหา disk # s # IDENTIFIER สำหรับพาร์ติชัน EFI บนไดรฟ์ Macintosh HD เอาต์พุตมาตรฐานจากdiskutil listบางสิ่งเช่นนี้ $ diskutil list /dev/disk0 #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *500.1 GB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_HFS …

0
globs ทั้งหมดที่ฉันสามารถใช้กับ grep ในทุบตีคืออะไร?
เปลือก Linux และ Unix เหมือนbashอนุญาตให้ใช้ globs เพื่อชื่อไฟล์โดยประมาณและทำให้การค้นหาไฟล์ง่ายขึ้น ฉันทราบสัญลักษณ์ตัวแทน (*) มี globs อื่นใดอีกบ้างbashที่ฉันสามารถใช้กับมันได้grep?

0
จะค้นหากระบวนการที่ใช้ RAM มากที่สุดใน X วินาทีสุดท้ายได้อย่างไร
คุณช่วยฉันจัดการเรื่องนี้ได้ไหม ฉันพยายามเขียนสคริปต์ทุบตีซึ่งจะตรวจสอบการใช้ ram (ไม่เพียง ram แต่ cpu และเครือข่ายเช่นกัน) และแสดง 3 กระบวนการที่ใช้ ram มากที่สุดในช่วง X วินาทีที่ผ่านมา? ฉันรู้ว่าฉันสามารถค้นหาว่ากระบวนการใดใช้ RAM มากที่สุดด้วยการรันสิ่งต่อไปนี้: ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 3 แต่สิ่งนี้จะเกิดขึ้นซ้ำได้อย่างไร? ฉันต้องการที่จะไม่เห็นสถานการณ์ในวินาทีนี้ แต่ตรวจสอบสถานการณ์เป็นเวลา 60 วินาทีและดูกระบวนการ 3 อันดับแรกที่ใช้หน่วยความจำมากที่สุด

1
ที่อยู่ IP ระบุทศนิยมเป็น / 8 หรือ / 16 โดยใช้เครื่องหมาย bash, sed หรือ awk?
ฉันมีไฟล์อินพุตที่มีรายการที่อยู่ ip และ ip_counts (พารามิเตอร์บางตัวที่ฉันใช้ภายใน) ไฟล์มีลักษณะดังนี้ 202.124.127.26 2135869 202.124.127.25 2111217 202.124.127.17 2058082 202.124.127.16 2014958 202.124.127.20 1949323 202.124.127.24 1933773 202.124.127.27 1932076 202.124.127.22 1886466 202.124.127.18 1882955 202.124.127.21 1803528 202.124.127.23 1786348 119.224.129.200 1776592 119.224.129.211 1639325 202.124.127.19 1479198 119.224.129.201 1145426 202.49.175.110 1133354 119.224.129.210 1119525 68.232.45.132 1085491 119.224.129.209 1015078 131.203.3.8 857951 202.162.73.4 817197 207.123.58.125 785326 …

1
การเรียกรายการฟังก์ชั่นที่มีให้ในสตรีม
ฉันกำลังเขียนสคริปต์ทุบตีเพื่อกำหนดค่าเซิร์ฟเวอร์ที่ผู้ใช้จะต้องเลือกการกระทำที่จะดำเนินการและสคริปต์จะดำเนินการ การกระทำแต่ละอย่างจะถูกนำมาใช้เป็นฟังก์ชั่น ฉันพบวิธีแก้ปัญหาเพื่อติดตามการอ้างอิงระหว่างการกระทำเหล่านั้น (โดยใช้ tsort และ แทค ); รายการสั่งซื้อของฟังก์ชั่นที่จะดำเนินการจะถูกส่งไปยัง stdout นี่คือรหัส: # This function accepts the task to be performed as its only argument. # 1) First, check if we have already added the task to the list. If true, # bail out to avoid processing it twice. # 2) …

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