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

Bash เป็นเชลล์ฟรีสำหรับระบบปฏิบัติการยูนิกซ์จากโครงการ GNU

1
useradd ทำงานได้แบบโต้ตอบ แต่ไม่ใช่สคริปต์ทุบตี
ฉันกำลังพยายามสร้างบัญชีผู้ใช้โดยอัตโนมัติ คำสั่งในสคริปต์นี้ทำงานได้ดีใน bash shell อย่างไรก็ตามเมื่อฉันรัน bash script มันจะล้มเหลวและฉันได้รับ 2 ซึ่งหมายถึง invalid command syntax ตามหน้า man useradd สคริปต์นี้ยังพิมพ์คำสั่งก่อนที่จะดำเนินการดังนั้นถ้าฉันเพียงคัดลอก / วางผลลัพธ์ "cmd-->" ), มันได้ผล. เช่น., cmd-->useradd bidwbre -m -c "Brent Bidwel" -G students นี่คือสคริปต์สั้น ๆ : #!/bin/bash while read id fn ln pw do echo "cmd-->useradd $id -m -c \"$fn $ln\" -G …

1
`ดำเนินการต่อ 'ในสคริปต์ BASH
ฉันพยายามค้นหาโฟลเดอร์ในคอลเล็กชันเพลงของฉันที่ไม่มีไฟล์ MP3 (บางไฟล์มีเฉพาะปกอัลบั้ม ดังนั้นฉันมีสิ่งนี้ในเชลล์สคริปต์ #!/bin/bash for DIR in * do [[ -d "${DIR}" ]] || continue cd "${DIR}" ls *.mp3 > /dev/null 2>&1 if [[ "$?" != "0" ]] then echo $DIR has no MP3 files! continue fi cd .. done ทว่าถึงแม้จะมีหลายโฟลเดอร์ แต่สคริปต์นี้จะตรวจสอบเพียงโฟลเดอร์แรกก่อนที่จะออก ... มันเหมือนกับว่า continue ข้างใน if แตกออกจากวงอย่างสิ้นเชิง
1 linux  bash 

2
ตั้งค่า -T ใน bash - มันทำอะไร?
อะไรนะ set -T หมายถึงทุบตี? มันทำอะไร? ฉันเชื่อว่ามันเกี่ยวข้องกับกับดักใน Unix แต่ฉันไม่แน่ใจ ฉันพบ นี้ : โครงสร้างหลายอย่างนั้นง่ายขึ้นถ้าเรียกกับกับดัก ในขณะที่เป็นเด็กเบื้องหน้ายังคงทำงาน คุณจะ เพียงติดตั้งตัวจัดการกับดักที่ทำ "สิ่ง" เกี่ยวกับปัญหา และจะถูกเรียกทุกครั้งที่คุณกด SIGINT (หรือ SIGQUIT) เพียงเท่านี้ ตัวจัดการสัญญาณในโปรแกรม C ถูกเรียกใช้โดยไม่ได้ตั้งใจ บางทีฉันก็เหมือนกัน โปรแกรมเมอร์ C มาก แต่ฉันพบพฤติกรรม sh ล่าช้ามาก ไม่ใช่งานง่าย #! /bin/sh onsig() { trap SIGINT kill -SIGINT $$ } set -T # set async execution of …
1 bash  unix  shell 

2
การทดแทนการขยายตัวรั้ง?
ฉันได้สร้างสคริปต์ทุบตีเล็ก ๆ เพื่อแยกจอภาพสองจอของฉันออกโดยอัตโนมัติด้วย imagemagick เมื่อฉันจับภาพหน้าจอ #! /bin/bash convert "$1" -crop 1024x600+0+0 +repage "${1//.png/}-left.png" convert "$1" -crop 1280x1024+1024+0 +repage "${1//.png/}-right.png" ใช้งานได้ดี แต่จะเปลี่ยนชื่อได้อย่างถูกต้องหากเป็น png (ซึ่งในกรณีนี้ไม่ใช่ปัญหา) อย่างไรก็ตามมีเพื่อให้ทำงานได้ดังนั้นมันจะย้ายนามสกุลไฟล์ไปยังจุดสิ้นสุดหรือไม่ ดังนั้นถ้าฉันเรียกสคริปต์นี้ (เรียกว่าแยกกัน) ในไฟล์ oldscreenshot.jpg มันจะให้ฉัน oldscreenshot-left.jpg และ oldscreenshot-right.jpg?

1
echo stdin เว้นแต่ว่าว่างเปล่าซึ่งในกรณีนี้ cat ไฟล์
ไปป์ไลน์ fstdraw in.fst | dot -Tpng | convert - -rotate 90 out.png แปลงไฟล์ในรูปแบบไบนารี่ที่แน่นอนเป็นภาพ PNG น่าเสียดายที่ในบางกรณี fstdraw ปล่อยศูนย์ไบต์ (บั๊กในแพ็คเกจ OpenFst .) จากนั้น dot ปล่อยศูนย์ด้วยไบต์แทน PNG ด้วย convert ล้มเหลวในการสร้าง out.png. ไฟล์ที่หายไปนั้นจะแบ่งคำสั่งในภายหลัง ที่สัญลักษณ์ไพพ์แรกจะมีวิธีแทรกสิ่งที่หมายถึง echo อินพุตของฉัน แต่ถ้าอินพุตของฉันว่างเปล่าให้เอาท์พุทไฟล์ dummy.txt แทน ดังนั้น out.png ถูกสร้างขึ้นเสมอ? (ใคร ๆ ก็สามารถเขียนสคริปต์ แต่แน่นอนว่าบางเชลล์สร้างขึ้นในหรือ เครื่องมือมาตรฐาน ทำสิ่งนี้แล้ว) สิ่งที่ต้องการ fstdraw in.fst | cat_maybe dummy.txt …

1
ฉันจะเขียนหา expression ได้อย่างไร (atime = ctime) (access time = change time)
ฉันต้องการหาชุดของไฟล์ที่จะลบที่ไม่ได้รับการเข้าถึงนับตั้งแต่ inode เปลี่ยน ไฟล์ที่กิจกรรมล่าสุดเกิดขึ้นเมื่อพวกเขาถูกย้ายไปยังไดเรกทอรีที่พวกเขาอยู่ในปัจจุบัน ที่นี่ฉันพยายามที่จะผ่านแต่ละไฟล์เป็นไฟล์อ้างอิงสำหรับการค้นหาทดสอบ man find ... -newerXY reference Compares the timestamp of the current file with reference. ... นี่คือสิ่งที่ฉันได้ลองมาแล้ว แต่มันไม่ทำงาน find . -type f | xargs -I{} find -newerac {} -printf "%p\tinode: %i\naccess: \t%a\nchange: \t%c\n"
1 linux  bash  find  timestamp 

1
ใช้กระบวนการในพื้นหลัง
ฉันมีคำถาม 2 ข้อเกี่ยวกับการเริ่มต้นกระบวนการในพื้นหลัง: เหตุใดการเริ่มต้นกระบวนการในพื้นหลังจึงเป็นเช่นนั้น: ./my_program & ( my_program มีชุดอนุญาต exe แน่นอน) ไม่ได้ทำ ต้องการสั่งพิมพ์พรอมต์คำสั่งเหมือนกับคำสั่งอื่น ๆ ก็แค่ เว้นบรรทัดใหม่ว่างไว้ด้วยเคอร์เซอร์กะพริบ เมื่อฉันเรียกใช้กระบวนการใหม่ต่อไปใน bash พื้นหลังจะแสดง sth เช่นนั้น: ./my_program & [30] 1439 [27] Done ./my_program [28] Done ./my_program [29] Done ./my_program หมายความว่าเริ่มต้น อีกกระบวนการพิเศษในพื้นหลังทำให้ระบบ แสดงข้อมูลเกี่ยวกับกระบวนการแสดงตัวอย่าง ( [27], [28], [29] บรรทัด) ตราบใดที่เริ่มต้นในปัจจุบัน) ( [30] บรรทัด)?
1 linux  bash 

2
วิธีการพิมพ์แบบ sed ถึงจุดสิ้นสุดของบรรทัดจาก socat
ฉันมีเซิร์ฟเวอร์ที่ส่งข้อมูลในการออกอากาศ UDP บนพอร์ต 1,0552 ข้อมูลคือ 7 ตัวเลขคั่นด้วยเครื่องหมายจุลภาคดังนั้น 5.351204,0.001968,-0.000473,-0.999222,0.000451,0.001455,1.084310 ฉันดึงข้อมูลนี้ด้วย socat -u udp-recv:10552,reuseaddr - ฉันต้องการเปลี่ยนรูปแบบของข้อมูลนี้ดังนั้นฉันจะทำให้เป็นข้อมูล ฉันไม่สนใจหมายเลขแรกดังนั้นฉันจึงลบออกด้วย s/[^,]*,//; ฉันเพิ่มช่องว่างหลังเครื่องหมายจุลภาคด้วย s/,/, /g ฉันจะเพิ่มวงเล็บเปิดไว้ที่จุดเริ่มต้นของแต่ละบรรทัดด้วย s/^/(/ ในที่สุดฉันพยายามที่จะเพิ่มวงเล็บปิดลงที่ท้ายบรรทัดแต่ละบรรทัดด้วย s/$/)/ คำสั่งสุดท้ายกลายเป็น socat -u udp-recv:10552,reuseaddr - | sed 's/[^,]*,//;s/,/, /g;s/^/(/;s/$/)/' ทุกอย่างทำงานได้ตามที่คาดไว้ยกเว้นวงเล็บปิดสุดท้ายจะปรากฏขึ้นที่จุดเริ่มต้นของแต่ละบรรทัดดังนั้นจึงดูเหมือน )0.051727, -0.595779, -0.794678, 0.082047, 0.644327, -0.027242 การลบบิตสุดท้ายของคำสั่งสำหรับ socat -u udp-recv:10552,reuseaddr - | sed 's/[^,]*,//;s/,/, /g;s/^/(/;' ผลลัพธ์ใน (0.079330, …
1 macos  bash  sed  socat 

1
Android & AndroidPC: วิธีการติดตั้ง Git-SCM
ฉันเห็นหลายแอพจาก Play store พวกเขาเป็นทั้งเทอร์มินัลหรือเทอร์มินัลที่เลียนแบบแอพ Termux กลายเป็นชื่อที่ได้รับความนิยม ด้วยระบบ Android กำลังพัฒนาหากระบบปฏิบัติการ AndroidPC (PhoenixOS, ChromeOS, Remix, Sailfish, Console OS .. แก้ไขให้ฉันถ้า Console OS ใช้สำหรับอุปกรณ์เพลย์สเตชั่นเท่านั้น) ความสามารถในการใช้ระบบของคุณเป็นเดสก์ท็อปกว้างขึ้น อย่างไรก็ตามนักพัฒนายังไม่ได้ให้ความกังวลใด ๆ เกี่ยวกับความสามารถในการเรียกใช้แอปพลิเคชั่น Cli (Git bash, Python py.exe, Ruby, NodeJS, MongoDB, แม้กระทั่ง PHP, MySQL, การเขียนโปรแกรมและการรวบรวมเลเยอร์, ​​... ) คุณไม่ได้เป็นเพียงแค่การเขียนโค้ดในโปรแกรมแก้ไขข้อความสีขาว ส่วนใหญ่แล้วพวกเราส่วนใหญ่พบว่าเราต้องทำการทดสอบควบคู่ไปกับการพัฒนา ... จนถึงขั้นตอนของ TDD ฉันเห็นว่า Android นั้นค่อนข้างเสถียรและรวดเร็ว (เว้นแต่จะยุ่งกับ pkgs ที่ไม่เหมาะสมหลังจากรูท), …
1 linux  bash  terminal  git  android 

2
ไม่พบไฟล์สคริปต์ Bash
ฉันมีสคริปต์ต่อไปนี้: for i in {1..16}; do $wget http://url/$i.jpg -O C:/Users/User/Desktop/Test/ done บันทึกไฟล์เป็น test.sh และเรียกใช้ภายใน Git บน windows ไฟล์ต่าง ๆ อยู่บนเซิร์ฟเวอร์ แต่เมื่อฉันเรียกใช้สคริปต์ฉันได้รับ "ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" ... คิด?
1 bash  git  wget 

2
ฉันได้รับข้อผิดพลาดแปลก ๆ จากคำสั่ง awk ต่อไปนี้ใน linux
`awk '{print "ssh -q " $1 " \"echo && hostname && df -h | grep /usr\";"}' essentials` มันควรจะเชื่อมต่อกับกลุ่มของชื่อโฮสต์จากไฟล์ "จำเป็น" และสะท้อนการใช้พื้นที่ดิสก์ของพวกเขา ถ้าฉันกำจัดติ๊กด้านหลังคุณจะเห็นสิ่งที่กำลังถูกดำเนินการ: ssh -q hostname1 "echo && hostname && df -h | grep /usr"; ssh -q hostname2 "echo && hostname && df -h | grep /usr"; ssh -q hostname3 "echo && …
1 linux  bash 

2
ฉันจะให้ ls ติดตามเนื้อหาของไดเรกทอรีเช่น tail -f บนไฟล์ได้อย่างไร
ฉันต้องการอัปเดตรายชื่อไฟล์ของไดเรกทอรีอย่างต่อเนื่องคล้ายกับส่วนท้ายด้วย -f ตั้งค่าสถานะบนไฟล์ มีวิธีที่เหมาะสมในการทำเช่นนี้?

1
ฉันจะสร้างไฟล์“ bash_completions” ใหม่จากไดเรกทอรี“ bash-complete / completions” ได้อย่างไร?
ยังไงก็เถอะ /usr/share/bash-completion/bash_completion ไฟล์ (ซึ่งมาจาก /etc/bash_completion ) ถูกลบแล้ว อย่างไรก็ตามส่วนที่เหลือของ bash-completion ไดเรกทอรีปรากฏเหมือนเดิม: ยังมี /usr/share/bash-completion/completions ไดเรกทอรีที่มีไฟล์ที่เกี่ยวข้องกับความสมบูรณ์จำนวนมาก เป็นไปได้ไหมที่จะงอกใหม่ bash_completion ไฟล์จาก completions ไดเรกทอรี? มันจะทำงานเพื่อเพียงแค่ cat ไฟล์ทั้งหมดใน completions ด้วยกัน? แก้ไข: ข้อมูลระบบ: > uname -a Linux AUC-Workstation2 3.2.0-4-amd64 #1 SMP Debian 3.2.68-1+deb7u1 x86_64 GNU/Linux > bash --version GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)

1
ไฟล์ไม่มีอยู่ แต่ ls แสดงข้อผิดพลาด“ ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว”
File system ext4 // which ls -> /bin/ls // Bash -> 3.2.57(2)-release // whoami -> admin ถ้าฉันวิ่ง ls จากนั้นฉันแรกจะได้รับรายชื่อของไฟล์ที่มีข้อผิดพลาด "ไม่พบไฟล์หรือโฟลเดอร์ที่คุณค้นหา" แล้วไฟล์สุขภาพของไดเรกทอรี โฟลเดอร์ที่มีไฟล์ไม่ดีเหล่านี้มีขนาดผิดปกติ: เกี่ยวกับไฟล์ที่มีข้อผิดพลาดฉันไม่สามารถ: ลบไฟล์ คัดลอกไฟล์ ย้ายไฟล์ ลบไดเรกทอรีเนื่องจากไม่ว่างเปล่า ( rm -r [DirectoryName] ) ไฟล์ที่ไม่ดีจะไม่ปรากฏ / แสดงอยู่ใน Mac OS หรือ MS-Windows ฉันสามารถ: ย้ายเนื้อหาของไดเรกทอรี ( mv ) รวมถึงไฟล์ที่ไม่ดี รับแท็บเพื่อเติมชื่อไฟล์ที่ไม่ดีให้สมบูรณ์ คำใบ้ใด ๆ อาจลบหรือกู้คืน
1 linux  bash  ls 

2
ฉันจะใช้ BASH เพื่อเปลี่ยน“ A” Train.flac เป็น 'A' Train ในชื่อไฟล์ได้อย่างไร
ฉันได้ลองชุดเครื่องหมายแบ็กสแลชและดอกจันและวงเล็บปีกกาทุกครั้งดูเหมือนว่าไม่มีอะไรทำงาน ฉันใช้เทอร์มินัลใน OS X และฉันจะซาบซึ้งจริงๆถ้ามีใครสามารถคัดท้ายฉันตรงๆ
1 bash  script 

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