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

Bash (Bourne-Again SHell) เป็นเชลล์ที่ใช้ในอินเตอร์เฟสบรรทัดคำสั่งของ Ubuntu ตามค่าเริ่มต้น

1
date -d 'วันจันทร์ก่อนหน้า "เพื่อแสดงวันจันทร์ก่อนหน้า
ด้วยdate -dสามารถแสดงอนาคตหรือวันที่ถัดไป $ date -d "next mon" Mon May 13 00:00:00 CST 2019 $ date -d "mon" Mon May 13 00:00:00 CST 2019 น่าเสียดายที่มันไม่สามารถแสดงวันทำงานก่อนหน้า $ date -d "previous Monday" date: invalid date ‘previous Monday’ จะแสดงวันทำงานก่อนหน้าในรูปแบบสตริงได้อย่างไร
10 bash 

2
ฉันสามารถกำหนดค่า bash / readline เพื่อแปลง NBSP เป็นพื้นที่ปกติได้หรือไม่
ฉันใช้รูปแบบแป้นพิมพ์ภาษาฟินแลนด์ซึ่งแผนที่AltGr+ Spaceไปยังพื้นที่ที่ไม่ทำลาย (NBSP, U + 00A0) ฉันมีความสุขกับสิ่งนี้โดยทั่วไป แต่ฉันพบว่าฉันมักจะเขียน NBSP โดยไม่ได้ตั้งใจแทนพื้นที่ว่างหลัง|สัญลักษณ์ "" (เขียนด้วยAltGr+ <ด้วยรูปแบบแป้นพิมพ์ภาษาฟินแลนด์) ขณะใช้บรรทัดคำสั่ง bash ฉันเดาว่ามันเกิดจากความจริงที่ว่าฉันต้องกดค้างไว้AltGrในขณะที่พิมพ์ไปป์และปล่อยมันก่อนที่จะกดปุ่มพื้นที่ และเมื่อฉันมีเวลาไม่ดีสำหรับการเปิดตัวของAltGrฉันฉันก็จบลงด้วยการพิมพ์ผิดที่มองไม่เห็นในบรรทัดคำสั่งและข้อความผิดพลาดเช่น grep: command not found ซึ่งมีลักษณะคล้ายกับ grep: command not found ซึ่งทำให้ปัญหานี้เล็กน้อยยากที่จะสังเกตเห็นในครั้งแรก ฉันรู้ว่าฉันสามารถปิดการใช้งาน NBSP ได้แต่ฉันต้องการปิดการใช้งาน (โดยมีAltGr+ Spaceเพื่อสร้างพื้นที่ปกติ) เฉพาะหลังจากที่ไปป์ไลน์หรือหากไม่สามารถทำได้ให้ใช้คำสั่ง bash หรือreadlineระดับบรรทัดเสมอ มีวิธีง่ายๆในการทำเช่นนี้โดยไม่ต้องแก้ไขซอร์สโค้ดของ bash readlineหรือเทอร์มินัลอีมูเลเตอร์ของฉัน ( gnome-terminal)? อีกวิธีที่ดีคือการกำหนดค่า NBSP ให้ปรากฏบนบรรทัดคำสั่งอย่างใดอย่างหนึ่งเช่นแทนที่ด้วยอักขระอื่น (พูด U + 2423 ␣) สำหรับการเรนเดอร์เท่านั้น

4
เรียกใช้สคริปต์ Bash ในโฟลเดอร์ทั้งหมดในเวลาเดียวกัน
สมมติว่าฉันมี.shสคริปต์Bash ( ) ห้าตัวในโฟลเดอร์ ( my_folder) และมีชื่อดังนี้: script_1.sh script_2.sh script_3.sh script_4.sh script_5.sh ฉันจะเขียนสคริปต์ Bash ที่หกหรือเพียงหนึ่งซับที่จะเริ่มทำงานสคริปต์เหล่านี้ด้วยกันได้อย่างไร ฉันต้องการสคริปต์ห้าตัวเพื่อเริ่มทำงานพร้อมกันในเวลาเดียวกันและไม่ใช่สคริปต์เดียว
10 bash  scripts 

2
เปรียบเทียบโฟลเดอร์
ฉันมีสองโฟลเดอร์ที่มีโครงสร้างโฟลเดอร์ย่อยที่คล้ายกันซึ่งฉันต้องการเปรียบเทียบ ตัวอย่างเช่น: A ├── child-1 ├── child-2 ├── child-3 ├── child-4 ├── child-5 และ B ├── child-1-some-text ├── child-2-more-text ├── child-3-nothing ├── child-6-random-text ├── child-7-more-random-text ฉันต้องการแสดงรายการโฟลเดอร์ย่อยทั้งหมดAที่มีคำนำหน้าสำหรับโฟลเดอร์ย่อยBและแสดงรายการโฟลเดอร์ย่อยที่สอดคล้องกันBเช่นกัน ผลลัพธ์ที่คาดหวังคือ child-1 -- child-1-some-text child-2 -- child-2-more-text child-3 -- child-3-nothing ความต้องการรอง: หากมีการแข่งขันหลายครั้งBก็ควรให้ข้อผิดพลาด / คำเตือน ทางออกของฉัน: cd A for f in `ls -d */`; do …
10 bash  directory 

2
การอ้างชื่อไฟล์มีความปลอดภัยเพียงพอหรือไม่ในการใช้งาน `xargs sudo rm -rf`?
ฉันเขียนสคริปต์ที่ลบทั้งหมดยกเว้นไฟล์สองไฟล์สุดท้ายในโฟลเดอร์: #!/bin/bash ls -1 --quoting-style=shell-always /path/to/some/folder \ | head -n -2 \ | xargs printf -- "'/path/to/some/folder/%s'\n" \ | xargs sudo rm -rf สคริปต์นี้จะถูกเรียกใช้เป็นงาน cron ทุกวัน เหตุผลมีดังนี้: รับรายการไฟล์ทั้งหมดโดยใช้ls -1(เพื่อให้ได้หนึ่งไฟล์ต่อบรรทัด); นำสองคนสุดท้ายจากรายการใช้head -n -2; ตั้งแต่lsพิมพ์พา ธ ที่สัมพันธ์กันให้ใช้xargs printfสิ่งต่าง ๆ เพื่อผนวกเส้นทางโฟลเดอร์และทำให้เป็นพา ธ สัมบูรณ์ ส่งพวกเขาไปใช้sudo rm -rfxargs ทุกคนสามารถเข้าถึงโฟลเดอร์นี้เพื่อให้ทุกคนสามารถสร้างและลบไฟล์ใด ๆ ในโฟลเดอร์นี้ ปัญหาคือ: sudo rm -rfน่ากลัว …

5
มีวิธีแสดงไอคอนเฉพาะขณะที่สคริปต์ของฉันทำงานหรือไม่
ฉันเป็นคนใหม่มากในการเขียนสคริปต์ นี่เป็นสคริปต์ง่าย ๆ (ใช้งานได้) ที่ฉันเขียนซึ่งจะแสดงรูปภาพเมื่อผ่านไป 5 นาที: sleep 300 && firefox file:///home/tasks/fiveminutes.jpg นี่คือคำถามของฉัน: บางครั้งฉันจำไม่ได้ว่าฉันเริ่มจับเวลาแล้วหรือยัง มีวิธีเพิ่มตัวบ่งชี้ข้อความหรือไอคอน (นึกคิดบนทาสก์บาร์ แต่จะดีมาก) ที่ปรากฏเป็นเวลา 5 นาที (จากช่วงเวลาที่ฉันเริ่มจับเวลาไปจนถึงช่วงเวลาที่ฉันจบ)? ขอบคุณมากสำหรับคำแนะนำใด ๆ
10 bash  scripts 

2
หลีกเลี่ยงการแทนที่ช่องว่างเมื่อเปลี่ยนชื่อไฟล์
ฉันพยายามเปลี่ยนชื่อไฟล์เช่นนี้: for file in *; do mv -i "$file" "$(echo "$file" | sed -e 's/[^A-Za-z0-9._-]/_/g')"; done แต่คำสั่งแทนที่ช่องว่างทั้งหมดที่มีsed_ ฉันจะแก้ไขsedคำสั่งเพื่อทำให้เป็นช่องว่างพร้อมกับอักขระที่ระบุได้อย่างไร ฉันลองใช้\sแล้วแต่ไม่ได้ผล ... แก้ไข: ตัวอย่างเช่นไฟล์trip: hill, ควรจะเปลี่ยนชื่อ: แต่คำสั่งดังกล่าวทำให้มันtrip_ hilltrip__hill

2
สคริปต์ทุบตี: ผลลัพธ์ที่แตกต่างเมื่อเรียกด้วยหรือไม่ใช้ sudo
ใน Ubuntu 16.04.3 ฉันมีสคริปต์ทุบตีง่ายมาก: test.sh [[ 0 == 0 ]] && result="true" || result="false" echo $result echo $USER $SHELL $0 เมื่อฉันเรียกมันว่าเป็นผู้ใช้ที่ไม่ใช่รูทmeหรือrootทำงานได้ตามที่คาดไว้ ถ้าฉันใช้sudo ./test.shมันบ่นเกี่ยวกับข้อผิดพลาดทางไวยากรณ์: $ ./test.sh true me /bin/bash ./test.sh $ sudo su # ./test.sh true root /bin/bash ./test.sh # exit $ sudo ./test.sh ./test.sh: 1: ./test.sh: [[: not found false …
10 bash  scripts  sudo 

3
ทำไมชื่อฟังก์ชั่นตัวเลขไม่ได้รับอนุญาต
พิจารณาสิ่งต่อไปนี้: $ ksh -c '1(){ echo hi;};1' ksh: 1: invalid function name $ dash -c '1(){ echo hi;};1' dash: 1: Syntax error: Bad function name $ bash -c '1(){ echo hi;};1' bash: `1': not a valid identifier bash: 1: command not found $ mksh -c '1(){ echo hi;};1' hi โดยทั่วไปผมพยายามที่จะประกาศฟังก์ชั่น1และ0ซึ่งจะเป็น …

2
เหตุใด mkdir จึงล้มเหลว (ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว) ในสคริปต์ที่มี BIN_DIR =“ ~ / bin /”
เหตุใดคำสั่ง mkdir จึงล้มเหลวด้วย: "ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว"? #!/bin/bash set -e BIN_DIR="~/bin/" if [ ! -d "$BIN_DIR" ]; then mkdir "$BIN_DIR" fi

3
`[!]` (เครื่องหมายอัศเจรีย์ในวงเล็บ) สัญลักษณ์แทนในทุบตี
ผมได้มาในรูปแบบ globbing [!]และสัญลักษณ์และน่าสนใจโดยเฉพาะให้ฉันเป็น สร้างนี้มีความคล้ายคลึงกับ[!]การสร้างยกเว้นมากกว่าที่ตรงกับตัวอักษรใดในวงเล็บก็จะตรงกับตัวอักษรใด ๆ ตราบใดที่มันไม่ได้อยู่ระหว่างและ[] rm myfile [!192] ฉันเชื่อว่าข้างต้นจะลบไฟล์ใด ๆ / ทั้งหมดยกเว้นไฟล์ใด ๆ / ทั้งหมดที่มี 192 ในชื่อของพวกเขา ฉันกังวลเกี่ยวกับการใช้งานที่เหมาะสมกับส่วนขยายไฟล์และโดยเฉพาะอย่างยิ่งในหลาย ๆ เงื่อนไข สิ่งที่จะเป็นไวยากรณ์ที่เหมาะสมในสถานการณ์เช่นนี้? rm myfile [!.gif .csv. mp3] หรือ rm myfile [!.gif !.csv !.mp3] ความกังวลของฉันคือช่วงเวลานั้นอาจถูกวางผิดตำแหน่งและดังนั้นไฟล์ใด ๆ ที่มี.(ซึ่งจะเป็นไฟล์ใดไฟล์หนึ่ง) จะถูกจัดการเมื่อฉันพยายามทำให้เกิดการจัดการไฟล์เฉพาะ สร้างนี้มีความคล้ายคลึงกับ[ ]การสร้างยกเว้นมากกว่าที่ตรงกับตัวอักษรใดในวงเล็บก็จะตรงกับตัวอักษรใด ๆ ตราบใดที่มันไม่ได้อยู่ระหว่างและ[] (อ้างจากhttp://www.tldp.org/LDP/GNU-Linux-Tools-Summary/html/x11655.htm ) ตอนนี้; สำหรับฉันแล้วแนะนำว่าเอกพจน์!นั้นเพียงพอแล้วและค่าทั้งหมดในนั้นจะอยู่ในช่วง

4
Ubuntu 17.04 - bash: cd: มีอาร์กิวเมนต์มากเกินไป
ฉันเพิ่งอัพเกรด Ubuntu 16.04 เป็น 17.04 และพบปัญหาเล็กน้อยกับcdคำสั่ง สมมติว่าฉันมีสองโฟลเดอร์: album-01&album-02 ใน Ubuntu 16.04 ถ้าฉันทำcd album*มันจะไปที่โฟลเดอร์แรกที่พบalbum-01 แต่ใน Ubuntu 17.04 ใหม่ถ้าฉันทำcd album*มันจะส่งผลให้ฉัน -bash: cd: too many arguments วิธีทำcdใน Ubuntu 17.04 เหมือนcdใน Ubuntu 16.04

2
การแปลงช่วงของที่อยู่ IPv4 เป็น netmasks โดยใช้ bash
ฉันมีไฟล์อินพุตพร้อมที่อยู่ IPv4: 94.228.16.0 - 94.228.25.255 94.241.136.0/24 94.241.136.0 - 94.241.136.255 94.29.128.0/17 94.29.128.0 - 94.29.191.0 94.29.192.0 - 94.29.255.0 94.74.181.0/24 94.74.181.0 - 94.74.181.31 94.74.181.128 - 94.74.181.255 ฉันจะแปลงช่วงที่อยู่เป็น netmasks ได้อย่างไร ผลลัพธ์ควรเป็น: 94.228.16.0/21 94.241.136.0/24 94.241.136.0/24 94.29.128.0/17 94.29.128.0/19 94.29.192.0/19 94.74.181.0/24 94.74.181.0/27 94.74.181.128/25

2
เปลี่ยนชื่อไฟล์ด้วยคำสั่งหนึ่งบรรทัด
ฉันมีไดเรกทอรีนี้และต้องการเปลี่ยนชื่อไฟล์: ===> ls -1 Der-vierte-Weise/ 10 - 10 - Erkenntniss.ogg 1 - 01 - Hoffnung.ogg 11 - 11 - Wahrheit.ogg 12 - 12 - Dankbarkeit.ogg 13 - 13 - Kredits.ogg 2 - 02 - Familie.ogg 3 - 03 - Demut.ogg 4 - 04 - Freude.ogg 5 - 05 - Schoenheit.ogg …

1
ดาวน์โหลดวิดีโอ YouTube ตั้งแต่เริ่มต้นจนจบแบทช์ซึ่งเป็นส่วนหนึ่งของเพลย์ลิสต์
คุณสามารถดูวิดีโอ Youtube แบบสแตนด์อโลนหรืออาจเป็นส่วนหนึ่งของเพลย์ลิสต์ ตัวอย่าง: https://www.youtube.com/watch?v=vbsNiOkm0BU และ https://www.youtube.com/watch?v=vbsNiOkm0BU&index=141&list=UUmM7KPLEthAXiPVAgBF6rhA vbsNiOkm0BUขอให้สังเกตส่วน คำถามคือรับส่วนนี้สำหรับวิดีโอทั้งหมดของช่อง / เพลย์ลิสต์ แรงจูงใจคือการดาวน์โหลดวิดีโอทั้งหมดของช่องนี้ (ประมาณ 3600) แต่ฉันไม่ประสบความสำเร็จในการyoutube-dlดาวน์โหลดทั้งหมดในครั้งเดียว ดังนั้นฉันต้องการที่จะดาวน์โหลดในเครือของ 100s เป็นตัวอย่าง หากฉันสามารถนำคำถามนี้ไปใช้เพิ่มเติมได้ฉันสามารถเขียนสคริปต์ทุบตีเพื่อดาวน์โหลดดัชนีเฉพาะของเพลย์ลิสต์ได้หรือไม่? หากคุณเห็นลิงก์ด้านบน: https://www.youtube.com/watch?v=vbsNiOkm0BU&index=141&list=UUmM7KPLEthAXiPVAgBF6rhA สังเกตส่วน&index=141นี้ ตอนนี้ถ้าทำสิ่งนี้: for i in {100..200} do youtube-dl https://www.youtube.com/watch?v=vbsNiOkm0BU&index=${i}&list=UUmM7KPLEthAXiPVAgBF6rhA done &index=${i}ขอให้สังเกตส่วน vbsNiOkm0BUนี้จะดาวน์โหลดวิดีโอเดียวกันอีกครั้งและอีกครั้งเนื่องจาก ความช่วยเหลือในเรื่องนี้จะได้รับการชื่นชมอย่างมาก ขอบคุณ.

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