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

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

4
อะไรคือความแตกต่างระหว่างการเรียกใช้ "bash script.sh" และ "./script.sh"
ถ้า script.sh เป็นอะไรที่เหมือน ๆ กัน #!/bin/bash echo "Hello World!" มีวิธีที่ต้องการเรียกใช้สคริปต์หรือไม่ ฉันคิดว่าคุณต้อง chmod ก่อนดังนั้นมันจึงเป็นปฏิบัติการ?

2
วิธีย้ายไฟล์โดยไม่สงวนสิทธิ์
ปัญหาคือฉันต้องการที่จะเห็นข้อผิดพลาดเมื่อย้ายไฟล์ แต่ไม่เห็นข้อผิดพลาดที่มีปัญหาสิทธิ์ กล่าวอีกนัยหนึ่ง - ฉันสนใจว่าไฟล์ไม่ได้ถูกส่งอย่างสมบูรณ์ แต่ไม่ต้องการเห็นข้อผิดพลาดเช่นนี้: mv: ล้มเหลวในการรักษาความเป็นเจ้าของสำหรับ `/home/blah/backup/pgsql.tar.gz ': ไม่อนุญาตให้ใช้งาน mv $backupfile $destination --ignore-permissionsดังนั้นผมจึงต้องการสิ่งที่ชอบ: ไฟล์สำรองข้อมูลสามารถเป็นอะไรก็ได้ตั้งแต่ 1 MiB ถึง 5 GiB และถ่ายโอนผ่าน NFS
42 bash  mv 

7
การตั้งค่า IFS สำหรับคำสั่งเดียว
ฉันรู้ว่าค่า IFS ที่กำหนดเองสามารถตั้งค่าสำหรับขอบเขตของคำสั่ง / ในตัวเดียว มีวิธีการตั้งค่า IFS ที่กำหนดเองสำหรับคำสั่งเดียวหรือไม่? เห็นได้ชัดว่าไม่ได้เนื่องจากได้รับผลกระทบจากค่า IFS ทั่วโลกด้านล่างเมื่อมีการพยายามทำเช่นนี้ #check environment IFS value, it is space-tab-newline printf "%s" "$IFS" | od -bc 0000000 040 011 012 \t \n 0000003 #invoke built-in with custom IFS IFS=$'\n' read -r -d '' -a arr <<< "$str" #environment IFS value remains unchanged …
42 bash 

10
จะตรวจสอบได้อย่างไรว่าไพพ์นั้นว่างเปล่าและเรียกใช้คำสั่งกับข้อมูลหากไม่มีหรือไม่
ฉันไพพ์บรรทัดในสคริปต์ทุบตีและต้องการตรวจสอบว่าไพพ์มีข้อมูลหรือไม่ก่อนป้อนเข้าโปรแกรม กำลังค้นหาฉันพบtest -t 0แต่มันใช้งานไม่ได้ที่นี่ ส่งคืนค่าเท็จเสมอ ดังนั้นจะแน่ใจได้อย่างไรว่าท่อมีข้อมูลหรือไม่ ตัวอย่าง: echo "string" | [ -t 0 ] && echo "empty" || echo "fill" เอาท์พุท: fill echo "string" | tail -n+2 | [ -t 0 ] && echo "empty" || echo "fill" เอาท์พุท: fill ซึ่งแตกต่างจากวิธีมาตรฐาน / มาตรฐานเพื่อทดสอบว่าก่อนหน้านี้ท่อที่ผลิตได้หรือไม่ อินพุตจะต้องเก็บรักษาไว้เพื่อส่งผ่านไปยังโปรแกรม นี่เป็นการสรุปวิธีการไพพ์เอาท์พุทจากโปรเซสหนึ่งไปยังอีกโปรเซสเท่านั้น ซึ่งมุ่งเน้นการส่งอีเมล
42 bash  shell  pipe 

9
ไม่สามารถหยุดสคริปต์ทุบตีด้วย Ctrl + C
ฉันเขียนสคริปต์ทุบตีง่าย ๆ ด้วยวนสำหรับพิมพ์วันที่และ ping ไปยังเครื่องระยะไกล: #!/bin/bash while true; do # *** DATE: Thu Sep 17 10:17:50 CEST 2015 *** echo -e "\n*** DATE:" `date` " ***"; echo "********************************************" ping -c5 $1; done เมื่อฉันเรียกใช้จากเทอร์มินัลฉันไม่สามารถหยุดมันCtrl+Cได้ ดูเหมือนว่าจะส่ง^Cไปยังเทอร์มินัล แต่สคริปต์ไม่หยุด MacAir:~ tomas$ ping-tester.bash www.google.com *** DATE: Thu Sep 17 23:58:42 CEST 2015 *** ******************************************** PING …
42 bash  terminal  signals 

7
ฉันจะคัดลอกหลายไฟล์ด้วยไวด์การ์ดได้อย่างไร
ฉันมีโฟลเดอร์ที่มีไฟล์จำนวนหนึ่งอยู่ในนั้น ABC. * (มีไฟล์ประมาณ 100 ไฟล์) ฉันต้องการคัดลอกไฟล์ทั้งหมดไปยังไฟล์ใหม่ด้วยชื่อที่ขึ้นต้นด้วย DEF * ดังนั้นฉันต้องการ ABC.Page1 ABC.Page2 ABC.Topic12 ...etc คัดลอกไปยัง DEF.Page1 DEF.Page2 DEF.Topic12 ...etc วิธีที่ง่ายที่สุดในการทำเช่นนี้กับคำสั่งแบทช์ (ใน BASH หรือคล้ายกัน) คืออะไร? ฉันกำลังคิดอะไรบางอย่างที่เกี่ยวข้องกับ sed หรือ awk หรือ xargs แต่ฉันมีปัญหาในการหาไวยากรณ์ ฉันสามารถเขียนสคริปต์ Python ได้ แต่ฉันคิดว่าอาจมีโซลูชันบรรทัดคำสั่งที่ไม่ซับซ้อนเกินไป

4
การค้นหาไฟล์ที่ใหญ่ที่สุดแบบเรียกซ้ำ
ฉันพยายามค้นหาไฟล์ที่ใหญ่ที่สุดในไดเรกทอรีแบบเรียกซ้ำ หากมีไดเรกทอรีย่อยในไดเรกทอรีนั้นฟังก์ชันนั้นจะต้องเข้าไปข้างในไดเรกทอรีนั้นและตรวจสอบว่ามีไฟล์ที่ใหญ่ที่สุดหรือไม่ เมื่อพบไฟล์ที่ใหญ่ที่สุดเอาต์พุตจะถูกแสดงด้วยชื่อพา ธ สัมพัทธ์และชื่อและขนาดของไฟล์ที่ใหญ่ที่สุด EX: dude@shell2 (~...assignment/solutions) % bash maxfile.sh ~/test class/asn dude.h.gch: 9481628 นี่คือสิ่งที่ฉันมี: #!/bin/sh clear recursiveS() { for d in *; do if [ -d $d ]; then (cd $d; echo $(pwd)/$line; du -a; recursiveS;) fi done } recursiveS ฉันติดขัดอยู่พักหนึ่งแล้ว ฉันไม่สามารถใช้สิ่งนี้ได้โดยการวางท่อจำนวนเครื่องมือ Unix ที่มีอยู่ ความคิดใด ๆ จะดี!

3
วิธีปิดเสียงบี๊บเฉพาะในแท็บ bash-complete
ผมพบว่าเสียงเตือนที่มีประโยชน์สำหรับบางสิ่งบางอย่างเพื่อให้ฉันเพียงต้องการที่จะปิดสำหรับการเสร็จสิ้นแท็บ (ฉันไม่ได้ถามว่าจะสมบูรณ์ปิดที่ได้รับการตอบในคำถามที่แตกต่างกันใน Serverfault) ฉันยังไม่มีสิทธิ์เข้าถึงรูททำงานบน RHEL5

2
เอาต์พุตจาก ls มีบรรทัดใหม่ แต่แสดงในบรรทัดเดียว ทำไม?
ฉันคิดว่าฉันอาจจะมองเห็นจุดที่ค่อนข้างพื้นฐานเกี่ยวกับเปลือกหอย เอาต์พุตจากคำสั่งlsโดยค่าเริ่มต้นจะแยกเอาต์พุตด้วยบรรทัดใหม่ แต่เชลล์แสดงเอาต์พุตในบรรทัดเดียว ใครสามารถอธิบายสิ่งนี้ให้ฉันได้บ้าง ฉันสันนิษฐานเสมอว่าเอาต์พุตถูกคั่นด้วยช่องว่าง แต่ตอนนี้เมื่อฉันเห็นเอาต์พุตคั่นด้วยบรรทัดใหม่ฉันคาดว่าเอาต์พุตจะแสดงในบรรทัดแยกกัน ตัวอย่าง: cpoweradm@debian:~/lpi103-4$ ls text* text1 text2 text3 odแสดงว่าเอาต์พุตถูกคั่นด้วยบรรทัดใหม่: cpoweradm@debian:~/lpi103-4$ ls text* | od -c 0000000 t e x t 1 \n t e x t 2 \n t e x t 0000020 3 \n 0000022 หากมีการขึ้นบรรทัดใหม่เหตุใดเอาต์พุตจึงไม่แสดงเป็น: text1 text2 text3
41 bash  terminal  ls  od 

5
วิธีรับ HOME ให้ USER
ฉันมีUSERตัวแปรในสคริปต์ของฉันและฉันต้องการดูHOMEเส้นทางของเขาตามUSERตัวแปร ฉันจะทำสิ่งนั้นได้อย่างไร


3
ตัวแปรเป็นคำสั่ง; eval vs bash -c
ฉันกำลังอ่านสคริปต์ทุบตีคนทำและฉันสังเกตเห็นว่าผู้เขียนไม่ได้ใช้ eval เพื่อประเมินตัวแปรเป็นคำสั่ง ผู้เขียนใช้ bash -c "$1" แทน eval "$1" ฉันถือว่าการใช้ eval เป็นวิธีที่ต้องการและอาจเร็วกว่าอยู่ดี มันเป็นเรื่องจริงเหรอ? มีความแตกต่างในทางปฏิบัติระหว่างทั้งสองหรือไม่? อะไรคือความแตกต่างที่โดดเด่นระหว่างสองสิ่งนี้?

7
การใช้ xargs กับอินพุตจากไฟล์
สมมติว่าฉันมีไฟล์ดังต่อไปนี้ bob john sue ตอนนี้เหล่านี้ corrospond โดยตรงไป (ในกรณีนี้) รูปแบบ URL เช่นhttp://example.com/persons/bob.tar, ,john.tarsue.tar xargsผมอยากจะใช้เส้นเหล่านี้และเรียกพวกเขาผ่าน ฉันไม่รู้ว่าสิ่งใดที่ส่งผ่านไปยังคำสั่งที่ถูกเรียกใช้งาน ฉันจะเข้าถึงพารามิเตอร์ได้อย่างไรจากพรอมต์ (บอกว่าฉันต้องการสะท้อนแต่ละบรรทัดเช่นcat file | xargs echo $PARAM) หรือจากสคริปต์ทุบตี
41 bash  scripting  xargs 

6
วิธีแทนที่หนึ่งอักขระด้วยอักขระอื่นในชื่อไฟล์ทั้งหมดของไดเรกทอรีปัจจุบันได้อย่างไร
คุณจะเปลี่ยนชื่อไฟล์ / โฟลเดอร์ย่อยทั้งหมดในโฟลเดอร์ปัจจุบันได้อย่างไร ให้บอกว่าฉันมีหลายไฟล์และส่วนย่อยที่มีช่องว่างและฉันต้องการแทนที่ช่องว่างทั้งหมดด้วยการขีดเส้นใต้ File 1 File 2 File 3 Dir 1 Dir 3 ควรเปลี่ยนชื่อเป็น File_1 File_2 File_3 Dir_1 Dir_3
41 linux  bash  rename 

2
เท่ากับ $ HOME เสมอหรือเปล่า
ฉันรู้ว่าอาจมีการถามก่อนหน้านี้ แต่ฉันไม่พบมันด้วย Google ป.ร. ให้ไว้ เคอร์เนล Linux ไม่มีการกำหนดค่าที่เปลี่ยนแปลง $ HOME ทุบตี จะ~ == $HOMEเป็นจริงหรือ

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