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

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

3
วิธีการเปลี่ยนเส้นทางการส่งออกของกระบวนการทำงาน?
ฉันรู้วิธีการเปลี่ยนเส้นทางการส่งออกและวิธีการปราบปรามพวกเขาในทุบตี ตอนนี้คิดว่าฉันไม่ได้ตั้งใจลืมที่จะผนวกเป็นส่วนหนึ่งของการเปลี่ยนเส้นทางส่งออกไปยังคำสั่ง (เช่น2>&1หรือ> /tmp/mystdout) และขั้นตอนการพื้นหลังของฉันทำงานอยู่แล้วในขณะที่ผมยังสามารถเปลี่ยนที่stdoutและstderrมีการเขียนไปยัง? ฉันไม่ต้องการฆ่าและรีสตาร์ทแอปพลิเคชันจริงๆ หากต้องการระบุเฉพาะเจาะจงมากขึ้นตามที่Gillesถามในความคิดเห็นของเขาฉันต้องการทำเรื่องนี้ในสถานการณ์เฉพาะเหล่านี้: ไฟล์เอาต์พุตไม่ถูกต้อง ลืมเปลี่ยนเส้นทางstderrไปที่stdout หรือทั้งสองอย่างรวมกัน เช่นฉันมี Apache ทำงานและฉันสามารถดูไฟล์อธิบาย: /proc/8019/fd/0 -> /dev/null /proc/8019/fd/1 -> /dev/null /proc/8019/fd/2 -> /var/log/apache2/error.log

3
ส่งอีเมล cron ไปที่ MAILTO ตามสถานะการออก
ฉันมีงาน cron ใช้คำสั่ง php ดังนี้: php /path/to/script.php > dev/null สิ่งนี้ควรส่งเอาต์พุต STDERR ไปยังที่อยู่ MAILTO เท่านั้น จากสิ่งที่ฉันรวบรวมสคริปต์ php จะไม่แสดงผลข้อมูล STDERR ใด ๆ แม้ว่าสถานะการออกจะเป็น 1 ฉันจะรับเอาต์พุตของคำสั่ง php (STDOUT) และส่งไปยัง MAILTO ได้เฉพาะในกรณีที่สถานะออกไม่ใช่ศูนย์เท่านั้น
11 bash  cron 

5
ใช้สถิติเพื่อจัดทำเวลาประทับสำหรับการสัมผัส
กำลังพยายาม OCR เอกสาร insitu บางส่วน (จากบรรทัดคำสั่ง linux บน windows share) กระบวนการของ OCRing คือการค้นหาและฉันได้สับสนโดยใช้คำสั่ง find เพื่อไพพ์ไฟล์ผ่านลูปอย่างถูกต้อง อย่างไรก็ตามฉันจำเป็นต้องเก็บบันทึกเวลาดั้งเดิมไว้เพื่อแก้ไข ฉันกำลังพยายามใช้สถิติและแตะดังต่อไปนี้: #!/bin/bash OLDIFS=$IFS IFS=$(echo -en "\n\b") for f in `find /mnt/library/Libra/Libra/Ashfords -name "*.pdf"` do ORIGTS=`stat -c "%Y" $f` sudo /opt/ABBYYOCR9/abbyyocr9 -rl English -pi -if $f -f PDFA -paemImageOnText -pafpr original -of $f touch -t …
11 bash  scripting  stat 

1
ปุ่มโฮมทำหน้าที่แปลก ๆ ใน bash (tty และ X) กับสตริงอินพุตแบบยาว
เมื่อฉันกดHomeถ้าอินพุทปัจจุบันของฉันสั้นพอ (พูด, <36 ตัวอักษร) มันใช้งานได้ดี อย่างไรก็ตามเมื่อฉันพิมพ์คำสั่งที่ยาวขึ้นและต้องการกลับไปที่จุดเริ่มต้นดูเหมือนว่ามันจะทำงานได้ แต่คำสั่งจะไม่ปรากฏอีกต่อไป ดูเหมือนว่าฉันไม่ได้อยู่ในจุดเริ่มต้น แต่ปิดประมาณ 10 ตัวอักษร แม้ว่าฉันจะพิมพ์ "สุ่มสี่สุ่มห้า" ก็ใช้งานได้ดี แต่ดูเหมือนว่าจะเป็นระเบียบทั้งหมดราวกับว่าอินพุตทั้งหมดถูกเลื่อนไปทางขวา แต่ไม่ใช่การวาดใหม่ ดังนั้นฉันจึงพิมพ์ทับมัน แต่ "ไม่จริง" เพราะสถานที่ที่ฉัน "ลบ" คือ "จริง ๆ " อักขระ 10 ตัวทางขวา ดังนั้นถ้าฉันพยายามที่จะลบคำสั่งตัวอักษร 10 ตัวแรกจะยังคงปรากฏ แต่ถ้าฉันกดEnterมันก็จะแสดงข้อความแจ้งอีกครั้งราวกับว่าอินพุตก่อนหน้านี้ว่างเปล่า ฉันรู้ว่ามันไม่ใช่คำอธิบายที่ดีที่สุดเท่าที่เคยมีมา แต่ประเด็นก็คือว่าการทุบตีจดจำและพยายามทำสิ่งที่ถูกต้อง แต่มักล้มเหลว ฉันทำซ้ำทั้งใน tty และใน terminal ในเซสชั่น X เมื่อฉันกดCtrl+ Vแล้วHomeฉันเห็นลำดับที่แตกต่างกัน ( ^[OHใน X, เป็น^[[1~tty) แต่ทั้งคู่ดูเหมือนจะอยู่ใน/etc/inputrc: # do …

4
การทำให้เสร็จสิ้นเส้นทาง Bash ทำงานกับ sudo อย่างไร
การทำให้แท็บเสร็จสมบูรณ์ไม่ทำงาน (อย่างน้อยใน Ubuntu และ AFAIK Arch) ด้วย sudo mount <whatever> แฟ้ม ISO /etc/fstabฉันพยายามที่จะติดตั้งไม่ได้อยู่ใน ถ้าฉันพิมพ์ mount <whatever> การทำงานให้เสร็จสมบูรณ์ (แต่แน่นอนว่าคำสั่งล้มเหลวเนื่องจากฉันไม่ใช่รูต) เห็นได้ชัดว่ามันเป็นsudoตัวแบ่งมัน การทำให้เสร็จสมบูรณ์ทำงานกับ sudo ได้อย่างไร มันเป็นเรื่องที่น่าแปลกใจด้วย sudo umount <whatever> งานเสร็จสมบูรณ์ มันประสบความสำเร็จได้อย่างไร? มันดูเป็น/etc/fstabอย่างไร การแก้ไข:ฉันแค่ใส่เชลล์สคริปต์ลงในการ/usr/local/binโทรนั้นsudo mount ...โดยมีการส่งผ่านอาร์กิวเมนต์ไป การดำเนินการให้เสร็จสมบูรณ์เมื่อเรียกสคริปต์นี้เนื่องจากไม่มีsudoในทาง

1
ทำการแมปปุ่ม bash vi หรือไม่
ฉันใช้ Dvorak และ vi ดังนั้นเมื่อฉันรู้เกี่ยวกับโหมด vi ใน Bash ฉันรู้สึกตื่นเต้นมาก อย่างไรก็ตามมันจะดียิ่งขึ้นถ้าฉันสามารถตั้งค่าปุ่มการเคลื่อนไหวให้เป็นปุ่มที่ฉันใช้ใน vi (ฉันสลับคีย์ไปรอบ ๆ จนกว่าปุ่มการเคลื่อนไหวจะกลับมาที่แถวโฮมใน Dvorak) ฉันจะทำสิ่งนี้ได้อย่างไร



2
.inputrc TAB ไม่ทำงานตามที่คาดไว้
วันนี้ฉันมีคำถามอื่นอีก: ทำไมเมื่อฉันใส่สิ่งเหล่านี้เข้าไป.inputrcพวกเขาทั้งสองทำสิ่งเดียวกัน TAB: menu-complete Shift-TAB: menu-complete-reverse เช่นพวกเขาทั้งสองทำสิ่งที่คนสุดท้ายพูด
11 bash  readline 

5
การทำดัชนีและการปรับเปลี่ยนอาร์เรย์พารามิเตอร์ Bash $ @
เป็นไปได้$@หรือไม่ที่จะอ้างถึงดัชนีใน ฉันไม่พบการอ้างอิงใด ๆ ที่จะใช้สิ่งต่อไปนี้ในวิกิของ GrayCatและคู่มือการใช้สคริปต์ขั้นสูงและอื่น ๆกำหนดค่านี้ให้กับตัวแปรที่แตกต่างกันก่อนที่จะทำการแก้ไขแทน $ echo ${@[0]} -bash: ${@[0]}: bad substitution เป้าหมายคือDRY : อาร์กิวเมนต์แรกใช้สำหรับสิ่งหนึ่งและส่วนที่เหลือเป็นอย่างอื่นและฉันต้องการหลีกเลี่ยงการทำซ้ำรหัสเพื่อทำให้เป็นมาตรฐาน$@อาร์เรย์หรือเพื่อสร้างฟังก์ชันแยกต่างหากสำหรับสิ่งนี้ ชี้ว่ามันอาจเป็นวิธีที่ง่ายที่สุด) ชี้แจง: วัตถุคือการปรับเปลี่ยนค่าของความยาวตัวแปร $@เพื่อให้รหัสง่ายต่อการตรวจแก้จุดบกพร่อง เวอร์ชันปัจจุบันค่อนข้างแฮ็คเกินไปสำหรับความชอบของฉันแม้ว่ามันจะทำงานได้แม้ในเส้นทางที่แปลกประหลาดเช่น $'--$`\! *@ \a\b\e\E\f\r\t\v\\\"\' \n' อัปเดต : ดูเหมือนว่าจะเป็นไปไม่ได้ รหัสนี้ใช้ทั้งรหัสและการทำสำเนาข้อมูล แต่อย่างน้อยก็ใช้งานได้: path_common() { # Get the deepest common path. local common_path="$(echo -n "${1:-}x" | tr -s '/')" common_path="${common_path%x}" shift # $1 …
11 bash  parameter 

4
Bash script เพื่อตรวจหาระบบควบคุมเวอร์ชันโดยการทดสอบสถานะการส่งคืนคำสั่ง
ฉันกำลังทำงานกับสคริปต์ทุบตีที่ฉันต้องการทำงานกับ VCS หลายประเภท ฉันคิดว่าการทดสอบว่าไดเรกทอรีเป็น repo สำหรับระบบโดยใช้คำสั่งข้อมูลทั่วไปและตรวจสอบรหัสส่งคืนสำเร็จหรือข้อผิดพลาด ในรหัสหลอก: if a svn command succeded; Then run svn commands elif a darcs command succeded; Then run darcs commands elif a mercurial command succeded; then run hg commands else something else fi ฉันสามารถเรียกใช้คำสั่งเช่น darcs show repoและใช้$?เพื่อรับรหัสส่งคืน คำถามของฉันคือมีวิธีเรียกใช้และส่งคืนหมายเลขรหัสส่งคืนในบรรทัดเดียวหรือไม่ ตัวอย่างเช่น if [ 0 -eq `darcs show …

3
ไม่สามารถสร้างไฟล์ temp สำหรับ here-document: การอนุญาตถูกปฏิเสธ
[หมายเหตุ: Q ที่คล้ายกันนี้เกี่ยวข้องกับข้อความแสดงข้อผิดพลาด bash เดียวกัน มันถูกทำเครื่องหมายว่าซ้ำกับคำถามอื่น ๆนี้ แต่เนื่องจากฉันพบแหล่งที่มาที่แตกต่างกันมากสำหรับข้อผิดพลาดนี้ฉันจะตอบคำถามของฉันเองด้านล่าง] บรรทัดสคริปต์ทุบตีที่ทำงานก่อนหน้านี้ while ... do ... done <<< "$foo" วันหนึ่งเริ่มผลิตข้อความผิดพลาดนี้: ไม่สามารถสร้างไฟล์ temp สำหรับ here-document: การอนุญาตถูกปฏิเสธ

3
tmux ไม่กำหนดค่า color PS1 ให้พร้อม
เมื่อเร็ว ๆ นี้ฉันตัดสินใจที่จะเปลี่ยนตัวแปร PS1 ของฉันเพื่อรองรับสี Solarized ที่สวยงามเพื่อความเพลิดเพลินในการรับชมเครื่อง เมื่อไม่ได้อยู่ในเซสชั่น tmux ทุกอย่างยอดเยี่ยม! สายรุ้งม้ายูนิคอร์นและพรอมต์ที่แตกต่าง! เย็น! อย่างไรก็ตามปัญหาอยู่ภายใน tmux อย่างไรก็ตาม ฉันได้รับการตรวจสอบว่าค่าของ PS1 เป็นสิ่งที่ผมคาดหวังว่ามันจะเป็นและเช่นเดียวกับมันคือเมื่อ tmux \[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\]ไม่ได้ทำงานคือ นามแฝงทั้งหมดของฉัน ฯลฯ ใน. bash_profile ของฉันยังทำงานได้ตามที่คาดไว้ tmux ยังแสดงสีโดยไม่เกิดเหตุการณ์ตามecho -ne "\033[1;33m hi"ที่คาดgls --colorไว้ บรรทัดที่เกี่ยวข้องในปัจจุบันใน. bash_profile ของฉันคือexport PS1="\[\033]0;\w\007\]\[\[\]\]\u\[\]@\[\[\]\]\h\[\]:\[\]\W\[\]$ \[\]"ถึงแม้ว่าในตอนแรกฉันจะหาสคริปต์ที่อยู่ในไฟล์. bash_prompt เพื่อจัดการกับเงื่อนไขบางอย่าง ฯลฯ ฉันพยายามเปลี่ยนกลับเป็นเวอร์ชันที่ง่ายกว่า การดำเนินการbashจะทำให้พรอมต์เปลี่ยนสี แต่ต้องทำในแต่ละบานหน้าต่าง export PS1=[that long string I've already posted]จะไม่ …
11 bash  osx  tmux  prompt 

1
กระบวนการทดแทนใน GNU Makefiles
ในการพร้อมท์ bash เราสามารถเรียกใช้ diff โดยใช้ไฟล์หลอก: diff <(echo test) <(echo test) การเพิ่มสิ่งนี้ตามที่เป็นลงใน Makefile ล้มเหลว: all: diff <(echo test) <(echo test) ข้อผิดพลาด (คำใบ้: / bin / sh ชี้ไปที่ / bin / bash ในระบบนี้): /bin/sh: -c: line 0: syntax error near unexpected token `(' /bin/sh: -c: line 0: `diff <(echo test) <(echo test)' …

3
stat: การแก้ไขเวลาประทับของไฟล์
ฉันใช้stat -f %m .bashrcเพื่อรับเวลาการแก้ไขของ. bashrc บน osx แต่เมื่อฉันเรียกใช้คำสั่งเดียวกันบน Ubuntu มัน spits ข้อผิดพลาด: stat: cannot read file system information for %m': No such file or directory มีวิธีที่เข้ากันได้เพื่อให้บรรลุนี้

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