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

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

2
sudo: ไม่สามารถเรียกใช้. /script.sh: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
ฉันนิ่งงัน ฉันมีสคริปต์ใน/homeไดเรกทอรีซึ่งสามารถใช้งานได้: [user@server ~]$ ll total 4 -rwx------ 1 user user 2608 Jul 15 18:23 qa.sh อย่างไรก็ตามเมื่อฉันพยายามเรียกใช้โดยแจ้งsudoว่าไม่พบ: [user@server ~]$ sudo ./qa.sh [sudo] password for user: sudo: unable to execute ./qa.sh: No such file or directory นี่คือการสร้างใหม่ ไม่มีการเปลี่ยนแปลงใด ๆ ที่จะทำให้เกิดปัญหา ในความเป็นจริงจุดของสคริปต์คือเพื่อให้แน่ใจว่ามันถูกสร้างขึ้นจริงตามนโยบายของเรา อาจเป็นไปไม่ได้และsudoกำลังถูกทำลายในระหว่างการสร้าง ฉันควรทราบด้วยว่าฉันสามารถเรียกใช้sudoคำสั่งอื่นในไดเรกทอรีอื่นได้ แก้ไข: สคริปต์ (ฉันไม่ได้เขียนดังนั้นอย่า/bin/bashให้ฉันมากกว่านั้นโปรด;)) #! /bin/bash . /root/.bash_profile customer=$1 …

6
เปลี่ยนชื่อไฟล์หลายรายการโดยใช้ Bash scripting
ฉันต้องการเปลี่ยนชื่อหลายไฟล์ในไดเรกทอรีเดียวกันโดยใช้ Bash scripting ชื่อของไฟล์มีดังนี้: file2602201409853.p file0901201437404.p file0901201438761.p file1003201410069.p file2602201410180.p ฉันต้องการเปลี่ยนชื่อเป็นรูปแบบต่อไปนี้: file2503201409853.p file2503201437404.p file2503201438761.p file2503201410069.p file2503201410180.p ฉันกำลังอ่านเกี่ยวกับคำสั่งเปลี่ยนชื่อและพยายามทำเช่นนี้ แต่ไม่ทำอะไรเลยฉันคิดว่าฉันมีคำถามเกี่ยวกับไวยากรณ์ จากนั้นฉันอ่านว่าคุณสามารถสร้างลูปโดยใช้คำสั่งmvดังนี้: for file in cmpsms*2014*.p; do mv "$file" "${file/cmpsms*2014*.p/cmpsms25032014*.p}" done แต่ฉันไม่สามารถเปลี่ยนชื่อไฟล์ได้ ผมทำอะไรผิดหรือเปล่า?
27 bash  rename 


4
เหตุใดจึงไม่มีคำสั่ง shell เพื่อสร้างไฟล์
สนใจโปรด: ฉันไม่ได้ถามวิธีการสร้างไฟล์จากบรรทัดคำสั่ง! ฉันใช้touchสำหรับทำไฟล์มาหลายปีโดยไม่สนใจว่าจุดประสงค์หลักของมันคืออย่างอื่น หากต้องการสร้างไฟล์จากบรรทัดคำสั่งมีความเป็นไปได้มากมาย: touch foo.bar > foo.bar cat > foo.bar echo -n > foo.bar printf '' > foo.bar และฉันแน่ใจว่ามีมากขึ้น แต่ความจริงคือไม่มีคำสั่งใด ๆ ข้างต้นที่ได้รับการออกแบบมาเพื่อสร้างไฟล์ ตัวอย่างเช่นman touchแนะนำคำสั่งนี้เพื่อเปลี่ยนการประทับเวลาไฟล์ ทำไมระบบปฏิบัติการถึงไม่สมบูรณ์เหมือน Unix (หรือ Linux) มีคำสั่งที่ออกแบบมาเพื่อสร้างไฟล์

5
ทำให้ bash ใช้คำสั่ง `time 'จากภายนอกแทนที่จะใช้เชลล์ในตัว
ฉันจะทำให้ bash ใช้ time binary (/ usr / bin / time) เป็นค่าเริ่มต้นแทนที่จะเป็นคีย์เวิร์ดเชลล์ได้อย่างไร? which timeการส่ง/usr/bin/time type timeคืนการtime is a shell keyword รันtimeกำลังดำเนินการคำหลักเชลล์: $ time real 0m0.000s user 0m0.000s sys 0m0.000s $ /usr/bin/time Usage: /usr/bin/time [-apvV] [-f format] [-o file] [--append] [--verbose] [--portability] [--format=format] [--output=file] [--version] [--quiet] [--help] command [arg...] enable -n …

5
ฉันจะแสดงรายการตัวเลือก bash'es สำหรับเชลล์ปัจจุบันได้อย่างไร
ตัวบุกรุก bash นั้นมีตัวเลือกเช่น บรรทัดที่ 22-23 ของหน้า man ของ bash: OPTIONS All of the single-character shell options documented in the description of the set builtin command can be used as options when the shell is invoked. In addition, bash interprets the following options when it is invoked: -c ... -i ... …
27 bash  shopt 

5
วิธีอ่านจากสองไฟล์อินพุตที่ใช้ขณะลูป
ฉันต้องการทราบว่ามีวิธีการอ่านใด ๆ จากไฟล์อินพุตสองไฟล์ในแบบซ้อนในขณะที่วนรอบทีละหนึ่งบรรทัด ยกตัวอย่างเช่นช่วยบอกฉันมีสองไฟล์และFileAFileB FileA: [jaypal:~/Temp] cat filea this is File A line1 this is File A line2 this is File A line3 FileB: [jaypal:~/Temp] cat fileb this is File B line1 this is File B line2 this is File B line3 สคริปต์ตัวอย่างปัจจุบัน: [jaypal:~/Temp] cat read.sh #!/bin/bash while read lineA …

3
Bash เติมข้อความอัตโนมัติ: ไฟล์รายการแรกจากนั้นวนรอบไฟล์เหล่านั้น
เป็นไปได้หรือไม่ที่จะกำหนดค่า bash ในลักษณะที่การเติมข้อความในแท็บแรกโดยอัตโนมัติจะแสดงรายการไฟล์ที่เป็นไปได้ทั้งหมด ตัวเลือกทั้งสองนั้นแยกกันได้ง่ายและฉันสามารถผูกมันไว้กับกุญแจที่แตกต่างกันได้ แต่ตัวเลือกด้านบนนั้นสมบูรณ์แบบ แต่ฉันไม่สามารถหาอะไรเกี่ยวกับมันได้ในเน็ต

3
ฉันจะจับเวลาท่อได้อย่างไร
ฉันต้องการtimeคำสั่งที่ประกอบด้วยคำสั่งสองคำสั่งแยกกันโดยมีหนึ่ง piping output ไปยังอีกคำสั่งหนึ่ง ตัวอย่างเช่นพิจารณาสองสคริปต์ด้านล่าง: $ cat foo.sh #!/bin/sh sleep 4 $ cat bar.sh #!/bin/sh sleep 2 ตอนนี้ฉันtimeจะรายงานเวลาที่ใช้ไปได้อย่างไรfoo.sh | bar.sh(และใช่ฉันรู้แล้วว่าไพพ์ไม่มีความหมายที่นี่ แต่นี่เป็นเพียงตัวอย่าง) มันทำงานได้อย่างที่คาดไว้ถ้าฉันใช้มันต่อเนื่องใน subshell โดยไม่ต้อง piping: $ time ( foo.sh; bar.sh ) real 0m6.020s user 0m0.010s sys 0m0.003s แต่ฉันไม่สามารถทำให้มันทำงานได้เมื่อ piping: $ time ( foo.sh | bar.sh ) real 0m4.009s user 0m0.007s …
27 bash  shell  pipe  time 

2
เหตุผลสำหรับผู้บริหารในสคริปต์ตัวตัด
ฉันได้เห็นตัวอย่างสคริปต์ wrapper ซึ่งโดยย่อมีดังต่อไปนี้: #!/bin/bash myprog=sleep echo "This is the wrapper script, it will exec "$myprog"" exec "$myprog" "$@" เท่าที่เห็นข้างต้นที่พวกเขาใช้เพื่อแทนที่เปลือกที่สร้างขึ้นใหม่เกือบจะในทันทีด้วยexec $myprogหนึ่งสามารถบรรลุเดียวกันโดยไม่ต้องexec: #!/bin/bash myprog=sleep echo "This is the wrapper script, it will exec "$myprog"" "$myprog" "$@" ในตัวอย่างล่าสุดนี้อินสแตนซ์ bash ใหม่จะเริ่มขึ้นและจากนั้น$myprogเริ่มต้นเป็นกระบวนการลูกของอินสแตนซ์ bash ประโยชน์ของแนวทางแรกคืออะไร?
27 bash  exec 

3
วิธีการจัดเรียงสตริงที่รวมกับสตริง + ตัวเลขโดยใช้สคริปต์ทุบตี?
นี่คือข้อมูลที่ฉันต้องการเรียงลำดับ แต่sortปฏิบัติต่อตัวเลขกับสตริงข้อมูลที่ไม่เรียงตามที่ฉันคาดไว้ / home / files / profile1 / home / files / profile10 / home / files / profile11 / home / files / profile12 / home / files / profile14 / home / files / profile15 / home / files / profile16 / home / files / profile2 …

5
Glob พร้อมลำดับตัวเลข
ฉันมีรายการไฟล์ pdf นี้ในไดเรกทอรี: c0.pdf c12.pdf c15.pdf c18.pdf c20.pdf c4.pdf c7.pdf c10.pdf c13.pdf c16.pdf c19.pdf c2.pdf c5.pdf c8.pdf c11.pdf c14.pdf c17.pdf c1.pdf c3.pdf c6.pdf c9.pdf ฉันต้องการต่อสิ่งเหล่านี้โดยใช้ ghostscript ตามลำดับตัวเลข (คล้ายกับสิ่งนี้): gs -q -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=out.pdf *.pdf แต่ลำดับการขยายตัวของเชลล์ไม่ได้ทำซ้ำลำดับตามธรรมชาติของตัวเลข แต่ตามลำดับตัวอักษร: $ for f in *.pdf; do echo $f; done c0.pdf c10.pdf c11.pdf …

1
หาก“ bash <file>” ใช้งานได้เหตุใด“ แหล่งที่มา <file>” จึงเกิดข้อผิดพลาดขึ้น
ฉันมีสคริปต์ต่อไปนี้: #!/bin/bash set -x if :; then echo a fi ถ้าผมทำงานbash /tmp/file, aสะท้อน แต่ถ้าผมทำงานsource /tmp/fileผมจะได้รับ: bash: /tmp/test: line 6: syntax error: unexpected end of file ผลลัพธ์: knezi@holly tmp]$set -x; source /tmp/test; set +x + source /tmp/test ++ set -x bash: /tmp/test: line 6: syntax error: unexpected end of file + …

2
ตัวแปรสภาพแวดล้อม TERM จะเริ่มต้นที่ใด
เมื่อเปิดหน้าต่าง terminal กับจำลอง GNOME xtermร์มินัลในเดสก์ท็กุยเปลือกสภาพแวดล้อมการลงทุนค่าเริ่มต้นของตัวแปรค่า หากฉันใช้CTL+ ALT+ F1เพื่อสลับไปยังหน้าต่างคอนโซล TTY และค่าที่มีการตั้งค่าecho $TERMlinux แรงจูงใจในการถามของฉันคือภายใน~/.bashrcตัวแปรของฉันมีการใช้ตัวแปรเพื่อพิจารณาว่ามีการจัดให้มีเปลือกสีหรือขาวดำแบบเก่าที่ดี # set a fancy prompt (non-color, unless we know we "want" color) case "$TERM" in xterm-color) color_prompt=yes;; esac ในทั้งคอนโซลเชลล์และเชลล์จำลองของ Gnome Terminal หากฉันพิมพ์ export TERM=xterm-color source /.bashrc กระสุนทั้งสองเปลี่ยนเป็นโหมดสี (สิ่งที่ฉันต้องการให้เกิดขึ้นเสมอในทั้งสอง) TERMกรุณาตั้งค่าเริ่มต้นไว้ที่ไหนและที่ไหนดีที่สุดในการเปลี่ยนค่าเริ่มต้นหากเป็นไปได้? ดูเหมือนจะไม่มีอะไรใน GUI ตัวจำลองเทอร์มินัลเพื่อเลือกหรือตั้งค่า TERM เริ่มต้น ฉันได้พิจารณาเพียงแค่เพิ่มบรรทัดexport TERM=xterm-colorลงที่ด้านบนของ~/.bashrcไฟล์ของฉันแต่สัญชาตญาณของฉันบอกว่านี่ไม่ใช่ทางออกที่ดีที่สุดและการค้นหา Google ของฉันยังไม่ได้นำฉันไปสู่คำตอบที่ดี …

1
ctrl c เทียบกับ ctrl z ด้วยเบื้องหน้างาน
Ctrl+ Zหยุดงานขณะที่Ctrl+ Cฆ่างาน ทำไมถึงเป็นอย่างนั้น? วิธีอื่นจะไม่เข้าท่ามากกว่านี้หรือ z@z-lap:~$ sleep 100&amp; [1] 4458 z@z-lap:~$ sleep 200&amp; [2] 4459 z@z-lap:~$ jobs [1]- Running sleep 100 &amp; [2]+ Running sleep 200 &amp; z@z-lap:~$ fg %1 sleep 100 ^Z [1]+ Stopped sleep 100 z@z-lap:~$ jobs [1]+ Stopped sleep 100 [2]- Running sleep 200 &amp; z@z-lap:~$ fg …

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