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

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

1
เหตุใดช่วงการขยายรั้งใช้จุดสองจุดแทนที่จะเป็นสามจุด (จุดไข่ปลา)
ในที่สุดผมก็เข้าใจ / ค้นพบว่าทำไมฉันไม่เคยมีการใช้bash's (และยังzsh' s) ช่วงการขยายตัวรั้งถูกต้อง: ไวยากรณ์คือ{1..10}แทนสิ่งที่ผมถือว่าจะเป็นจุดไข่ปลา{1...10}คือ ฉันขอทราบได้ไหมว่าเพราะเหตุใดจึงเลือกสองจุดผ่านสามจุด การใช้จุดไข่ปลาในการเขียนโปรแกรมคอมพิวเตอร์เป็นเรื่องปกติและเข้าใจดีตามลิงค์ (Wikipedia) ซึ่งเป็นสาเหตุที่ทำให้ความอยากรู้อยากเห็นของฉันป่องๆ

2
ทำไม bash จึงไม่สนใจ SIGTERM
kill -15 -1บางครั้งเมื่อฉันต้องการที่จะออกจากระบบได้อย่างรวดเร็วที่ฉันทำ ฉันสังเกตเห็นว่า bash ไม่สนใจ SIGTERM ฉันสงสัยว่าอะไรคือเหตุผลสำหรับพฤติกรรมทุบตีดังกล่าว ? UNIX ไม่ได้สนใจ SIGTERM มากนักโดยไม่มีเหตุผลใช่ไหม UPDATE: ผลเหมือนกัน (ไม่) สำหรับทุกคน: $ kill -TERM $$ $ type kill kill is a shell builtin $ command kill -TERM $$ $ /bin/kill -TERM $$ UPDATE2: จากคนทุบตี : เมื่อทุบตีเป็นแบบโต้ตอบในกรณีที่ไม่มีกับดักใด ๆ ก็จะละเว้น SIGTERM ดังนั้นมันจึงเสร็จสิ้นตามวัตถุประสงค์ แต่ทำไม
10 bash  signals 

4
ใช้ chown $ USER: $ USER ภายในสคริปต์ทุบตี
ในสคริปต์ทุบตีเล็ก ๆ ที่ฉันใช้ฉันพยายามที่จะ chown ไดเรกทอรีใหม่ที่สร้างขึ้น ฉันได้เพิ่ม: sudo chown $USER:$USER /var/www/$sitename sudo chmod 775 /var/www/$sitename หลังจากบรรทัดที่ฉัน mkdir ( sudo mkdir /var/www/$sitename) ด้วยเหตุผลบางอย่าง chown ไม่ทำงาน ฉันสามารถรันด้วยตนเอง แต่เมื่อเขียนในไฟล์มันไม่ทำงาน ฉันสังเกตว่า "chown" ไม่ได้เน้นสีเดียวกับ "mkdir" และ "chmod" แต่ฉันไม่สามารถเข้าใจปัญหาของฉันได้ ทำไม chown ไม่ทำงานที่นี่ เป็นปัญหา$USER:$USERหรือไม่? แก้ไข นี่คือสคริปต์เต็ม ฉันจะ chown ไฟล์ใดที่ผู้ใช้ที่ไม่ใช่รูทสั่งสคริปต์ #!/bin/sh #!/bin/bash # New Site cd /etc/apache2/sites-available/ echo "New …

2
ฉันจะทำอย่างไรถ้าทุบตีหยุดสะท้อน?
หนึ่งในแอปพลิเคชันที่ฉันใช้ในที่ทำงานบางครั้งใช้สกรูกับทุบตีของฉันดังนั้นฉันจึงไม่เห็นอินพุตของฉันอีกต่อไป กล่าวคือ $ echo foo foo $ กลายเป็น $ foo $ ฉันพยายามเรียกใช้อย่างไม่ถูกต้องstty -echoซึ่งทำให้เรื่องแย่ลงและตอนนี้ก็หยุดรับคำสั่งทั้งหมดเข้าด้วยกันซึ่งทำให้อินพุตของฉันอยู่ในสถานะที่ทำให้เกิด>การปรากฏทุกครั้งที่ตัวแบ่งบรรทัดและไม่มีอะไรอื่น ฉันควรทำอย่างไร

2
วิธีอ่านอินพุตของผู้ใช้เมื่อใช้สคริปต์ในไพพ์
ปัญหาทั่วไป ฉันต้องการเขียนสคริปต์ที่โต้ตอบกับผู้ใช้แม้ว่ามันจะอยู่กลางสายโซ่ของท่อ ตัวอย่างคอนกรีต รูปธรรมก็จะใช้เวลาfileหรือstdinแสดงเส้น (มีหมายเลขบรรทัด) stdoutขอให้ผู้ใช้ป้อนข้อมูลการเลือกหรือสายตัวเลขและจากนั้นพิมพ์เส้นที่สอดคล้องกับ มาเรียกสคริปต์นี้selectorกัน ถ้าอย่างนั้นฉันก็อยากจะทำ grep abc foo | selector > myfile.tmp ถ้าfooมี blabcbla foo abc bar quux xyzzy abc จากนั้นselectorนำเสนอตัวเลือก (บนเทอร์มินัลไม่ใช่ในmyfile.tmp!) 1) blabcbla 2) foo abc bar 3) xyzzy abc Select options: หลังจากนั้นฉันพิมพ์ 2-3 และจบลงด้วย foo abc bar xyzzy abc myfile.tmpเป็นเนื้อหาของ ฉันมีสคริปต์ตัวเลือกทำงานอยู่และโดยพื้นฐานแล้วมันจะทำงานได้อย่างสมบูรณ์แบบหากฉันไม่เปลี่ยนเส้นทางอินพุตและเอาต์พุต ดังนั้น selector foo ทำงานเหมือนที่ฉันต้องการ …

4
สคริปต์ Bash จะบอกได้อย่างไรว่ามันทำงานอย่างไร
ฉันมีสคริปต์ Bash ที่ฉันพยายามทำเพื่อช่วยให้ฉันเรียกใช้คำสั่งที่ค่อนข้างซับซ้อนและมีการเปลี่ยนแปลงเล็กน้อยซึ่งมันจะถามฉันเกี่ยวกับเสียงสะท้อนและการอ่าน ฉันพบวิธีแก้ไขเพื่อบังคับให้รันเทอร์มินัลเพื่อเรียกใช้งานคำสั่ง แต่ฉันไม่สนใจสิ่งนั้น สิ่งที่ฉันต้องการให้ทำคือถ้าฉันว่างและกด Enter บนมันใน Nautilus (ทำให้มันรันด้วย Run Software) มันจะค่อยๆปรากฏขึ้นแจ้งเตือนว่า "กรุณาเรียกใช้จากเทอร์มินัล" ฉันสามารถทำให้ป๊อปอัปเกิดขึ้นได้ดังที่ฉันรู้จักคำสั่ง - แต่ฉันไม่สามารถรับ Bash script เพื่อบอกได้ว่ามันทำงานอยู่ภายใน terminal หรือไม่ดูเหมือนว่าจะคิดเสมอ เป็นไปได้ไหม

3
วิธีจัดการ backspace ขณะอ่านหนังสือ
ฉันจะจัดการ backspaces ที่ป้อนมาได้อย่างไรมันจะแสดง^?ว่าพยายามแล้วและreadนับตัวอักขระอย่างไรเนื่องจาก12^?3ตัวอักษร 5 ตัวนั้นเสร็จสมบูรณ์แล้ว (แม้ว่าพวกเขาทั้งหมดจะไม่ใช่อินพุตจริง) แต่หลังจากที่12^?3^?มันกลับมาพร้อมท์แปลก ๆ กรุณาช่วย! -bash-3.2$ read -n 5 12^?3^?-bash-3.2$
10 bash  shell  line-editor  read 

3
การใช้ $ & in bash คืออะไร
ฉันกำลังมองหาพารามิเตอร์พิเศษในทุบตี ฉันอยากรู้ว่าอะไรคืออะไร$&และแตกต่าง$_อย่างไร ฉันเห็นผลลัพธ์ต่อไปนี้เมื่อรันคำสั่ง แต่ไม่สามารถค้นหาความหมายได้เช่นกัน k@Linux:~$ echo $& [1] 12397 $ k@Linux:~$ echo $n [1]+ Done echo $ k@Linux:~$
10 bash  shell 

6
ฉันจะลบบรรทัดใหม่ต่อท้ายในทุบตีได้อย่างไร
ฉันกำลังมองหาสิ่งที่ชอบทำตัวของ chompPerl ฉันกำลังมองหาคำสั่งที่พิมพ์เพียงแค่อินพุตลบอักขระตัวสุดท้ายหากเป็นบรรทัดใหม่: $ printf "one\ntwo\n" | COMMAND_IM_LOOKING_FOR ; echo " done" one two done $ printf "one\ntwo" | COMMAND_IM_LOOKING_FOR ; echo " done" one two done (การทดแทนคำสั่งใน Bash และ Zsh ลบบรรทัดใหม่ที่ตามมาทั้งหมด แต่ฉันกำลังมองหาบางสิ่งที่จะลบบรรทัดใหม่ที่ต่อท้ายหนึ่งบรรทัด)

2
เหตุใดชื่อไฟล์จึงมีเครื่องหมายคำถามเมื่อฉันเรียกใช้สคริปต์บนเครื่องระยะไกลของฉัน
ฉันมีสคริปต์เล็ก ๆ ที่ดึงข้อมูลวันที่ปัจจุบันเรียกใช้สคริปต์ PHP และเปลี่ยนเส้นทางผลลัพธ์ (และข้อผิดพลาด) ไปยังชื่อไฟล์ที่มีวันที่ปัจจุบัน DATE=$(date +"%Y%m%d") FILE="log/${DATE}.log" php -q script.php >> $FILE 2>&1 เมื่อฉันเรียกใช้สคริปต์นี้บนเครื่องท้องถิ่นของฉัน (Windows 7 Aptana IDE) ที่สคริปต์ PHP ทำงานได้ดีและ logfile 20140502.logมีชื่อไฟล์ที่คาดไว้เช่น แต่เมื่อฉันกดสคริปต์นั้นผ่าน SFTP ไปยังเครื่องระยะไกลของฉันและเรียกใช้สคริปต์นั้นชื่อไฟล์จะเป็นดังนี้: 20140502?.log? อาจมีปัญหาอะไร? นี่เป็นข้อผิดพลาดการเข้ารหัส (เช่นการเข้ารหัสสำหรับการอัปโหลด SFTP คือ ANSII ซึ่งคาดว่า UTF-8) หรือฉันจะต้องเปลี่ยนแปลงอะไรในสคริปต์ตัวเอง? ข้อมูลเกี่ยวกับระบบ / เชลล์: [foo@bar path]$ sh --version GNU bash, version 3.2.25(1)-release …

2
พิมพ์เนื้อหาคลิปบอร์ดของระบบในทุบตี
xclipมีวิธีที่จะนำออกคำสั่งบางอย่างไปยังคลิปบอร์ดของระบบผ่านทางคือ some-command | xclip -selection clipboard ฉันต้องการทำงานย้อนกลับ - พิมพ์คลิปบอร์ดของระบบไปยังเทอร์มินัล สามารถทำได้อย่างไร?
10 bash  xorg  clipboard 

1
ทำความเข้าใจกับค่าเริ่มต้นของ IFS
ใน GNU bash รุ่น 4.2.8 ของฉัน IFS มีค่าเริ่มต้นของพื้นที่แท็บและตัวป้อนบรรทัดตามค่าเริ่มต้น: usr@T42 ~ $ echo -n "$IFS" | hexdump -C 00000000 20 09 0a | ..| 00000003 usr@T42 ~ $ มีเหตุผลสำหรับ IFS เริ่มต้นดังกล่าวหรือไม่ นอกจากนี้ที่สาธารณูปโภคใช้ไอเอฟเอนอกเหนือจากการทุบตีในตัวread?
10 bash  shell  quoting 

3
ฉันจะส่งผ่านอาร์กิวเมนต์ที่เก็บไว้ในตัวแปรไปยัง WGET ได้อย่างไร
ฉันกำลังเขียนสคริปต์ทุบตีที่ใช้ wget อย่างกว้างขวาง เพื่อกำหนดพารามิเตอร์ทั่วไปทั้งหมดในที่เดียวฉันเก็บไว้ในตัวแปร นี่คือรหัสชิ้นหนึ่ง: useragent='--user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0"' cookies_file="/tmp/wget-cookies.txt" save_cookies_cmd="--save-cookies $cookies_file --keep-session-cookies" load_cookies_cmd="--load-cookies $cookies_file --keep-session-cookies" function mywget { log "#!!!!!!!!!# WGET #!!!!!!!!!# wget $quiet $useragent $load_cookies_cmd $@" wget $useragent $load_cookies_cmd "$@" } Saddly ไม่ทำงาน ยังไงก็เถอะฉันขาดวิธีที่ถูกต้องในการจัดเก็บพารามิเตอร์กับตัวแปร $ useragent, $ save_cookies_cmd, $ load_cookies_cmd และ caling wget ผ่าน …

3
เสร็จสิ้นคำบนหน้าจอเช่นเดียวกับใน VIM (Bash หรือ Tmux)
ฉันจะกำหนดค่า Bash, Zsh หรือ Tmux เพื่อทำให้ตัวระบุที่ตรงกันล่าสุดบนหน้าจอสมบูรณ์ได้อย่างไร พิจารณาสถานการณ์สมมติทั่วไปนี้: $ git fetch remote: Counting objects: 16, done. remote: Compressing objects: 100% (9/9), done. remote: Total 9 (delta 4), reused 0 (delta 0) Unpacking objects: 100% (9/9), done. From /opt/git/thunder * [new branch] issue540 -> origin/issue547314 e9204cf..4d42c3f v2.1 -> origin/v2.1 ฉันจะทำให้ Bash / …

3
วิธีแก้ไขเอาต์พุตในไพพ์ไลน์คำสั่ง bash
ตัวอย่างเช่นฉันได้รับคำสั่งจากบางบรรทัด $ some-command John Bob Lucy ตอนนี้ฉันต้องการเพิ่มคำสั่ง chaining ที่แก้ไขเอาต์พุต $ some-command | other-command Hi John Bye Hi Bob Bye Hi Lucy Bye จะเขียนยังother-commandไงดี? (ฉันเป็นสามเณรในทุบตี)
10 bash  pipe 

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