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

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

5
แทนที่สตริงหลังจากจุดสุดท้ายในทุบตี
ฉันมีรูปแบบต่อไปนี้ในสตริง (ที่อยู่ IP): 123.444.888.235 ฉันต้องการแทนที่หมายเลขสุดท้ายหลังจากจุดด้วย0ดังนั้นมันจะกลายเป็น: 123.444.888.0 ฉันจะทำในbashภาษาสคริปต์ภาษาอื่นได้อย่างไร

1
ย้ายกลับไปที่จุดสิ้นสุดของประวัติทุบตีเมื่อใช้การค้นหาแบบย้อนกลับหรือไม่
ฉันเก็บประวัติทุบตีไว้ค่อนข้างนานและบางครั้งเมื่อฉันค้นหาบางอย่างด้วยฟังก์ชันค้นหาย้อนกลับของทุบตี ( Ctrl+ r) ฉันสิ้นสุดที่จุดเริ่มต้นของประวัติการค้นหาและฉันยังไม่พบสิ่งที่ฉันต้องการจากนั้นฉันต้องการย้ายกลับไปยังจุดสิ้นสุด ของไฟล์ประวัติ ทางเลือกหนึ่งคือการใช้ฟังก์ชั่นการค้นหาไปข้างหน้า ( Ctrl+ s) ซึ่งเคลื่อนเข้าใกล้จุดสิ้นสุดของประวัติศาสตร์หรือดำเนินการ#แต่ยังมีแป้นพิมพ์ลัดเพื่อย้ายไปยังจุดสิ้นสุดของประวัติทุบตีโดยตรงหรือไม่

3
ออกจากฟังก์ชัน bash ไม่ใช่เทอร์มินัล
ฉันมีสคริปต์ทุบตีด้านล่างซึ่งติดตั้ง Zookeeper แต่ถ้าไม่ได้ติดตั้งแล้ว ##zookeper installZook(){ ZOOK_VERSION="3.4.5" ZOOK_TOOL="zookeeper-${ZOOK_VERSION}" ZOOK_DOWNLOAD_URL="http://www.us.apache.org/dist/zookeeper/${ZOOK_TOOL}/${ZOOK_TOOL}.tar.gz" if [ -e $DEFAULT_INSTALLATION_DEST/${ZOOK_TOOL} ]; then echo "${ZOOK_TOOL} alreay installed"; exit 1; # <<<< here elif [ ! -e $DEFAULT_SOURCE_ROOT/${ZOOK_TOOL}.tar.gz ]; then wgetIt $ZOOK_DOWNLOAD_URL else echo "[info] : $DEFAULT_SOURCE_ROOT/$ZOOK_TOOL already exists" fi sudo mkdir -p /var/lib/zookeeper sudo mkdir -p /var/log/zookeeper tarIt "$DEFAULT_SOURCE_ROOT/$ZOOK_TOOL.tar.gz" …

6
ฉันจะแยก / แยกวิเคราะห์ URL ที่สมบูรณ์จากสตริงแบบกึ่งสุ่มได้อย่างไร
ฉันต้องการ bash parse / แยก URL แบบเต็ม (และเฉพาะ URL) จากสตริงสั้นแบบสุ่ม ตัวอย่าง: bob, the address is http://www.google.com หรือ https://foo.com/category/example.html is up หรือ Error 123 occurred at http://bit.ly/~1223456677878 หรือ Stats are up: https://foo1234.net/report.jpg ฉันลองใช้cat foo_output | egrep -o "https?://[\w'-\.]*\s"แต่ดูเหมือนจะไม่ทำงาน

1
วิธีเปิดใช้งานประวัติคำสั่งของเชลล์
ฉันใช้อูบุนตู 13.04 ในประวัติคำสั่งของเชลล์จะถูกลบทิ้งอย่างใกล้ชิด มีคนบอกฉันได้ไหมว่าจะป้องกันไม่ให้เกิดเหตุการณ์เช่นนี้ได้อย่างไร

9
หลังจากติดตั้ง oh-my-zsh: … /.zshrc:source:34: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว… /.oh-my-zsh/oh-my-zsh.sh
ฉันเพียงแค่พยายามที่จะติดตั้งOh-My-zsh ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อฉันพยายามเรียกใช้rvm: zsh: command not found: rvm ฉันยังได้รับข้อผิดพลาดต่อไปนี้เมื่อฉันพยายามเปิดแท็บใหม่: /Users/jack/.zshrc:source:34: no such file or directory: /Users/jack/.oh-my-zsh/oh-my-zsh.sh /Users/jack/.zshrc:source:38: no such file or directory: .bashrc นี่คือ.zshrcไฟล์ของฉัน: # Path to your oh-my-zsh configuration. ZSH=$HOME/.oh-my-zsh # Set name of the theme to load. # Look in ~/.oh-my-zsh/themes/ # Optionally, if you set this to "random", …
12 bash  zsh  oh-my-zsh 


4
ตรวจสอบว่ามีการกดปุ่มเมาส์หรือไม่จากนั้นเรียกใช้สคริปต์หรือคำสั่ง
มีวิธีใดบ้างที่จะทำให้สถานะปุ่มเมาส์ผิดพลาด Xdotool สามารถรับตำแหน่งเมาส์ได้เท่านั้น ฉันต้องการตั้งค่าบางอย่างที่ฉันสามารถกำหนดกฎที่เมื่อกดปุ่มเมาส์สคริปต์สามารถดำเนินการได้
11 bash  mouse 

2
ไฟล์ dot ไม่ได้รับมาเมื่อรันคำสั่งผ่าน ssh
เมื่อฉันเรียกใช้โปรแกรมแบบโต้ตอบมันทำงานได้ดี: ssh somehost $ ~/some/path/somescript.py เมื่อฉันรันโปรแกรมผ่าน ssh โดยตรงมันไม่ทำงาน PYTHONPATHไม่ได้ตั้งค่าตัวแปรเนื่องจาก.bashrcไม่ได้มีการจัดหา ssh somehost ~/some/path/somescript.py ถ้าฉันวิ่งssh somehost 'source ~/.bashrc; ~/some/path/somescript.py'ก็ใช้งานได้ดี แต่หลังจะไม่ทำงานสำหรับคนอื่น ๆ เช่นใช้ tcsh และไม่มี~/.bashrcเลย) คืออะไรคำสั่งเพื่อเรียกใช้สิ่งที่ผ่าน SSH บนโฮสต์ที่ทำงานสำหรับเปลือกหอยทั้งหมดอื่นได้หรือไม่

1
Bash พยายามเขียน prompt สองตัวหรือไม่
ฉันกำลังดูผลลัพธ์ strace ของกระบวนการทุบตีทำงานที่เชื่อมต่อกับเทอร์มินัลเพื่อการศึกษา กระบวนการทุบตีของฉันมี PID 2883 ฉันพิมพ์ [OP@localhost ~]$ strace -e trace=openat,read,write,fork,vfork,clone,execve -p 2883 2> bash.strace เข้าสู่อาคารผู้โดยสาร จากนั้นฉันก็เข้าสู่กระบวนการทุบตีของฉันและมีปฏิสัมพันธ์ต่อไปนี้: [OP@localhost ~]$ ls ฉันมองเห็นผลลัพธ์ strace: Process 2883 attached read(0, "l", 1) = 1 write(2, "l", 1) = 1 read(0, "s", 1) = 1 write(2, "s", 1) = 1 read(0, "\r", 1) = …
11 bash  tty  strace 

3
ทำไม sh (ไม่ใช่ทุบตี) บ่นเกี่ยวกับฟังก์ชั่นที่กำหนดไว้ใน. bashrc ของฉัน
ฉันได้รับสิ่งนี้เมื่อฉันเปิดเซสชันเทอร์มินัล: sh: ข้อผิดพลาดการนำเข้าคำจำกัดความของฟังก์ชั่นสำหรับ `read.json ' sh: ข้อผิดพลาดการนำเข้าคำจำกัดความของฟังก์ชั่นสำหรับ `ts-project ' sh ไม่ชอบฟังก์ชั่นเหล่านี้เพราะมันดูเหมือน: read.json(){ :: } และ ts-project(){ :: } คำถามที่แท้จริงคือ - ทำไมการshสัมผัส / ตีความไฟล์เหล่านี้? ฉันใช้ MacOS และเห็นสิ่งนี้มาก่อนมันเป็นเรื่องลึกลับ ฉันคิดว่าทุบตีเท่านั้นที่จะโหลดไฟล์เหล่านี้ update : ทุบตีและ sh จะไม่มีอะไรผิดปกติ เมื่อฉันพิมพ์ bash ในเทอร์มินัลฉันได้รับสิ่งนี้: alex$ bash beginning to load .bashrc finished loading .bashrc bash-3.2$ เมื่อฉันพิมพ์shใน terminal ฉันได้รับสิ่งนี้: alex$ sh …

1
ทำไมคุณไม่สามารถย้อนกลับลำดับของโอเปอเรเตอร์การเปลี่ยนเส้นทางอินพุตในขณะที่ลูปได้
ใน Bash คุณสามารถย้ายโอเปอเรเตอร์การเปลี่ยนเส้นทางอินพุตไปยังด้านหน้าของคำสั่ง: cat <<< "hello" # equivalent to <<< "hello" cat ทำไมคุณไม่ทำเช่นเดียวกันกับลูปในขณะที่? while read -r line; do echo "$line"; done <<< "hello" # hello <<< "hello" while read -r line; do echo "$line"; done # -bash: syntax error near unexpected token `do' ฉันคิดว่ามันค่อนข้างสับสนเพราะคุณสามารถไปป์ในขณะที่ ฉันกำลังทำอะไรผิดหรือเป็นเพียงการตัดสินใจออกแบบหรือไม่

2
ทำไมฉันถึงสูญเสียข้อมูลโดยใช้การสร้างท่อ bash นี้
ฉันกำลังพยายามรวมโปรแกรมบางโปรแกรมเช่นนั้น (โปรดละเว้นการรวมพิเศษใด ๆ นี่เป็นงานที่กำลังดำเนินการอยู่): pv -q -l -L 1 < input.csv | ./repeat <(nc "host" 1234) แหล่งที่มาของโปรแกรมซ้ำมีลักษณะดังนี้: #include <fcntl.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/epoll.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #include <iostream> #include <string> inline std::string readline(int fd, const size_t len, const char delim = …

2
สคริปต์ Bash ควรฆ่าอินสแตนซ์เหล่านั้นของสคริปต์อื่นที่เปิดตัว
ในสถานการณ์ปัจจุบันบางสคริปต์ 'calling.sh' เปิดตัวอีกสคริปต์ 'called.sh' ในพื้นหลังดำเนินการดำเนินการอื่น ๆ นอนในขณะที่แล้วสิ้นสุด 'called.sh' pkill called.shด้วย มันใช้งานได้ดี จากนั้นฉันก็อยากจะเปิดตัว 'เรียกว่า. sh' จากเทอร์มินัลอื่นเป็นสคริปต์แบบสแตนด์อโลนในเวลาอื่น ๆ ไม่ว่าจะก่อนหรือหลังการเปิดตัว calls.sh อินสแตนซ์อิสระเหล่านี้ไม่ควรถูกฆ่าโดย 'calling.sh' ฉันจะบรรลุสิ่งนี้ได้อย่างไร สัญชาตญาณบอกว่าสคริปต์การโทรควรจะสามารถบอกกระบวนการที่เริ่มต้นจากชื่ออื่น ๆ ที่กำลังทำงานอยู่ในขณะเดียวกัน ในฐานะที่เป็นตัวแปร 'calling.sh' อาจเปิดตัว 'เรียกว่า' ซึ่งเป็นลิงก์สัญลักษณ์ไปยัง 'เรียกว่า' sh ' สิ่งนี้ซับซ้อนกว่าการจัดการสถานการณ์ข้างต้นหรือไม่? ข้อควรระวังและการปรับเฉพาะใดที่ใช้ลิงค์สัญลักษณ์จำเป็นต้องใช้?
11 bash  process 

2
เหตุใดฉันจึงไม่สามารถใช้ตัวแปรเป็นคำนำหน้าให้กับคำสั่งเพื่อตั้งค่าตัวแปรสภาพแวดล้อมได้
โดยปกติแล้วมันเป็นไปได้ที่จะตั้งค่าตัวแปรสภาพแวดล้อมสำหรับคำสั่งโดยนำหน้ามันเช่น: hello=hi bash -c 'echo $hello' ฉันรู้ด้วยว่าเราสามารถใช้ตัวแปรเพื่อทดแทนส่วนใดส่วนหนึ่งของการเรียกใช้คำสั่งดังนี้: $ cmd=bash $ $cmd -c "echo hi" # equivalent to bash -c "echo hi" ฉันประหลาดใจมากที่พบว่าคุณไม่สามารถใช้ตัวแปรเพื่อนำหน้าคำสั่งเพื่อตั้งค่าตัวแปรสภาพแวดล้อม กรณีทดสอบ: $ prefix=hello=hi $ echo $prefix # prints hello=hi $ $prefix bash -c 'echo $hello' hello=hi: command not found เหตุใดฉันจึงไม่สามารถตั้งค่าตัวแปรสภาพแวดล้อมโดยใช้ตัวแปรได้ ส่วนนำหน้าเป็นส่วนพิเศษหรือไม่? ฉันสามารถทำให้มันทำงานได้โดยใช้ eval ข้างหน้า แต่ฉันก็ยังไม่เข้าใจว่าทำไม ฉันใช้ทุบตี 4.4

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