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

คำถามเฉพาะของ Bourne อีกครั้งของเชลล์ใน GNU เมื่อเทียบกับเชลล์ Bourne / POSIX อื่น ๆ สำหรับคำถามเกี่ยวกับเชลล์ Unix โดยทั่วไปให้ใช้ / เชลล์แท็กแทน

5
ทดสอบว่าไฟล์ถูกแก้ไขหลังจากวันที่ในชื่อไฟล์
ฉันมีไฟล์ชื่อYYYYMMDDในชื่อไฟล์เช่น file-name-20151002.txt ฉันต้องการตรวจสอบว่าไฟล์นี้ถูกแก้ไขหลังจาก 2015-10-02 หมายเหตุ: ฉันสามารถทำได้โดยดูที่ผลลัพธ์ของlsแต่ฉันรู้ว่าการแยกวิเคราะห์ผลลัพธ์lsเป็นความคิดที่ไม่ดี ฉันไม่จำเป็นต้องค้นหาไฟล์ทั้งหมดที่ลงวันที่หลังจากวันที่ที่ระบุเพียงแค่ต้องทดสอบไฟล์หนึ่งไฟล์ในแต่ละครั้ง ฉันไม่กังวลเกี่ยวกับไฟล์ที่ถูกแก้ไขในวันเดียวกันหลังจากที่ฉันสร้างมันขึ้นมา นั่นคือฉันแค่อยากรู้ว่าไฟล์นี้ด้วย20151002ในชื่อมีการแก้ไขในวันที่ 3 ตุลาคม 2015 หรือหลังจากนั้น ฉันใช้ MacOs 10.9.5
11 bash  files  osx  timestamps 

5
Bash - PS1 ไม่อัปเดตด้วยชื่อโฮสต์ที่เหมาะสมหลังจากเปลี่ยนชื่อโฮสต์ในสคริปต์
นี่เป็นสำเนาโพสต์ของฉันจาก stackoverflow ฉันรู้ว่าฉันควรถามที่นี่ ... ฉันต้องการเรียกใช้สคริปต์ที่เปลี่ยนชื่อโฮสต์และอัพเดต bash prompt (ตัวแปร PS1) ของฉันทันทีด้วยชื่อโฮสต์ที่เหมาะสม ฉันจะทำให้สิ่งนี้เกิดขึ้นได้อย่างไร ฉันเรียกใช้สิ่งนี้ #!/bin/bash # Usage: ./changehost <newhostname> #Do two sed's to edit the files for persistent hostname change sed -i s/$(hostname)/$1/g "/etc/hosts" sed -i s/$(hostname)/$1/g "/etc/sysconfig/network" #run the hostname command with new hostname to update it hostname $1 ในเทอร์มินัลอย่างนั้นและรับสิ่งนี้ [user@host …
11 bash  shell 

2
ทำไม bash เชื่อมโยงไปยัง ncurses
ฉันคิดว่าฉันสังเกตเห็นสิ่งนี้มาก่อน แต่ไม่เคยคิดถึงมันมากนัก ตอนนี้ฉันอยากรู้ > ldd /bin/bash linux-vdso.so.1 => (0x00007fff2f781000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f0fdd9a9000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f0fdd7a5000) libc.so.6 => /lib64/libc.so.6 (0x00007f0fdd3e6000) /lib64/ld-linux-x86-64.so.2 (0x00007f0fddbf6000) Libtinfo เป็นส่วนหนึ่งของ ncurses นี่เป็นระบบ fedora แต่มันเหมือนกันบน Ubuntu และฉันสังเกตเห็นบน raspbian (ตัวแปร debian) มันยังเชื่อมโยงไปยัง libncurses ด้วย อะไรคือเหตุผลนี้ ฉันคิดว่าทุกอย่างทุบตีสามารถทำได้ด้วย libreadline (ซึ่งอยากรู้อยากเห็นมันไม่ได้เชื่อมโยงไป) นี่เป็นเพียงสิ่งทดแทนสิ่งนั้นหรือไม่?
11 bash  readline  ncurses 


4
bash loop เพิ่มขึ้น 0.02
ฉันต้องการสร้างห่วงสำหรับทุบตีด้วย 0.02 เป็นส่วนเพิ่มที่ฉันพยายาม for ((i=4.00;i<5.42;i+=0.02)) do commands done แต่มันไม่ทำงาน

6
ลบบรรทัดออกจากไฟล์โดยขึ้นอยู่กับบรรทัดที่พบในไฟล์อื่น
ไฟล์ file1.txt มีบรรทัดเช่น: /api/purchase/<hash>/index.html ตัวอย่างเช่น: /api/purchase/12ab09f46/index.html ไฟล์ file2.csv มีบรรทัดเช่น: <hash>,timestamp,ip_address ตัวอย่างเช่น: 12ab09f46,20150812235200,22.231.113.64 a77b3ff22,20150812235959,194.66.82.11 ฉันต้องการกรอง file2.csv ลบบรรทัดทั้งหมดที่มีค่าแฮชอยู่ใน file1.txt กล่าวได้ว่า: cat file1.txt | extract <hash> | sed '/<hash>/d' file2.csv หรืออะไรทำนองนี้ มันควรจะตรงไปตรงมา แต่ดูเหมือนว่าฉันจะไม่สามารถใช้งานได้ ใครช่วยกรุณาให้ขั้นตอนการทำงานสำหรับงานนี้ได้ไหม

3
ไปจาก String ไปยัง Array ของ "words" ใน Bash
ฉันต้องไปจากสตริงไปยังอาร์เรย์ที่แต่ละรายการเป็นแต่ละคำในสตริงนั้น ตัวอย่างเช่นเริ่มต้นด้วย: VotePedro="Vote for Pedro" ฉันต้องการอาร์เรย์: Vote For Pedro ซึ่งฉันควรจะสามารถย้ำกว่าเป็น: for i in "${votePedroArray[@]}" do ## Do something done

4
การออกจากเชลล์สคริปต์ด้วยลูปซ้อนกัน
ฉันมีเชลล์สคริปต์ที่มีลูปซ้อนกันและเพิ่งพบว่า "exit" ไม่ได้ออกจากสคริปต์จริงๆ แต่เป็นลูปปัจจุบันเท่านั้น มีวิธีการออกจากสคริปต์อย่างสมบูรณ์ในเงื่อนไขข้อผิดพลาดบางอย่างหรือไม่ ฉันไม่ต้องการใช้ "set -e" เนื่องจากมีข้อผิดพลาดที่ยอมรับได้และจะต้องเขียนใหม่มากเกินไป ตอนนี้ฉันกำลังใช้ kill เพื่อฆ่ากระบวนการด้วยตนเอง แต่ดูเหมือนว่าควรมีวิธีที่ดีกว่าในการทำเช่นนี้
11 bash  shell  scripting  exit 

5
bash: การกำหนดบรรทัดแรกของตัวแปรให้กับตัวแปร
ฉันมีตัวแปรหลายบรรทัดและฉันต้องการเพียงบรรทัดแรกในตัวแปรนั้น สคริปต์ต่อไปนี้แสดงให้เห็นถึงปัญหา: #!/bin/bash STRINGTEST="Onlygetthefirstline butnotthesecond orthethird" echo " Take the first line and send to standard output:" echo ${STRINGTEST%%$'\n'*} # Output is as follows: # Onlygetthefirstline echo " Set the value of the variable to the first line of the variable:" STRINGTEST=${STRINGTEST%%$'\n'*} echo " Send the modified variable to standard …
11 bash 

2
วิธีการเข้าถึงอาร์กิวเมนต์ที่สองจากคำสั่งสุดท้ายในประวัติศาสตร์?
ฉันเริ่มเรียนรู้ Regex บางอย่างดังนั้นฉันใช้คำสั่งนี้ซ้ำ ๆ : grep pattern /usr/share/dict/american-english เฉพาะส่วนที่มีการเปลี่ยนแปลงรูปแบบดังนั้นฉันต้องเขียนนิพจน์แบบยาว " / usr / share / dict / american-english " ซ้ำแล้วซ้ำอีก ใครบางคนทำข้อสังเกตว่ามันเป็นไปได้ที่จะขยายการโต้แย้งของคำสั่งจากประวัติคำสั่งโดยการพิมพ์ชุดอักขระที่เป็นความลับแทนการแสดงออกเต็มรูปแบบ คุณช่วยบอกชุดอักขระที่เป็นความลับเหล่านั้นให้ฉันได้ไหม

4
ฉันจะวัดระยะเวลาที่สคริปต์ของฉันใช้ในการรันและรวมไว้ในอีเมลที่สร้างขึ้นได้อย่างไร
ฉันมีสคริปต์ทุบตีง่ายๆที่ทำงานชุดของการตรวจสอบ (กping, nslookupฯลฯ ) แล้วส่งรายงานอีเมลที่มีการส่งออกของข้อมูลว่า ฉันต้องการให้อีเมลรวมข้อมูลว่าต้องใช้เวลานานเท่าใดในการเรียกใช้สคริปต์ทั้งหมด มีวิธีง่าย ๆ ในการรวบรวมข้อมูลหรือไม่

3
ทำไมปุ่มลัด Ctrl + A กระโดดไปที่จุดเริ่มต้นของบรรทัดในเทอร์มินัล
เช่นเดียวกับการกระโดดไปยังจุดสิ้นสุดของบรรทัดคือCtrl+ Eซึ่งEสามารถคิดได้ว่าเป็นจุดสิ้นสุดทำไมมันกระโดดไปที่จุดเริ่มต้นใช้A?

2
วงเล็บทำงานในเปลือก bash เอง แต่ไม่ใช่ใน bash script
ฉันสามารถเรียกใช้คำสั่งนี้จากพรอมต์บรรทัดคำสั่งของฉัน: cp -r folder/!(exclude-me) ./ หากต้องการคัดลอกเนื้อหาทั้งหมดซ้ำfolder ยกเว้นไดเรกทอรีย่อยที่มีชื่อexclude-meลงในไดเรกทอรีปัจจุบัน งานนี้ตรงตามที่ตั้งใจไว้ อย่างไรก็ตามฉันต้องการสิ่งนี้เพื่อทำงานในสคริปต์ทุบตีที่ฉันเขียนซึ่งฉันมีสิ่งนี้: if [ -d "folder" ]; then cp -r folder/!(exclude-me) ./ rm -rf folder fi แต่เมื่อฉันเรียกใช้สคริปต์: bash my-script.sh ฉันได้รับสิ่งนี้: my-script.sh: line 30: syntax error near unexpected token `(' my-script.sh: line 30: ` cp -r folder/!(exclude-me) ./' และฉันก็ไม่รู้ว่าทำไมมันถึงทำงานได้จาก command prompt แต่บรรทัดเดียวกันที่แน่นอนไม่สามารถใช้งานได้ในสคริปต์ทุบตี

4
Legacy Debian version และ Bash Shellshock
เรากำลังเรียกใช้ Debian Etch, Lenny และ Squeeze เพราะการอัพเกรดไม่เคยทำในร้านนี้มาก่อน เรามีมากกว่า 150 ระบบที่ใช้งาน Debian เวอร์ชันต่างๆ ในแง่ของ "shell shock" ของสัปดาห์นี้ฉันคิดว่าฉันต้องอัพเกรด bash ฉันไม่รู้จักเดเบียนดังนั้นฉันจึงเป็นห่วง ฉันสามารถรันapt-get install bashบนระบบเดเบียนทั้งหมดของฉันและรับแพคเกจ Bash ที่ถูกต้องในขณะที่ที่เก็บของฉันถูกชี้ไปที่รายการ Squeeze ถ้าไม่ฉันมีแนวทางปฏิบัติอื่นอีกไหม

6
ฉันจะแสดงความแตกต่างระหว่าง 2 ไฟล์ได้อย่างไร
ไฟล์ของฉันประกอบด้วยสิ่งต่อไปนี้; ประมาณ: username:username:username:username:username บรรทัดด้านบนยังคงประมาณ 600 อักขระ ฉันใช้awkคำสั่งเพื่อใช้เป็นอาร์กิวเมนต์ในคำขอ API / HTTP ที่ส่งจากบรรทัดคำสั่ง ฉันกำลังใช้สคริปต์เพื่อรับรายการบัญชีผู้ใช้ 'ติดตาม' ฉันและทุก ๆ 24 ชั่วโมงหรือมากกว่านั้นเปรียบเทียบรายการต้นฉบับบนฮาร์ดดิสก์ของฉันกับรายการชื่อผู้ใช้ที่เพิ่งแสดงผลใหม่ (และแสดงว่าใครไม่ได้ติดตาม ฉัน . ฉันจะต้องสรุปตรรกะของฉันเป็นลูปโดยใช้ bash .. ทดสอบชื่อผู้ใช้แต่ละคน สคริปต์ปัจจุบันของฉัน: user=$(awk -F: '{ print $1 }' FILE) # Grab $User to use as an argument. following=$(exec CURRENT_FOLLOWERS) # Outputs the new file echo "X amount …

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