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

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

3
PS1 = '$ (pwd)' ทำไมมันถึงใช้งานได้และทำไมมันถึงแตกต่างจาก PS1 = $ (pwd)
เหตุใดเมื่อฉันป้อนคำสั่งนี้พรอมต์จึงเปลี่ยนไดเรกทอรีของฉัน PS1='$(pwd)' ฉันกำลังใช้เครื่องหมายคำพูดเดี่ยวซึ่งหมายถึงไม่มีการแก้ไขอาคาecho '$(pwd)'—— →$(pwd) ยิ่งไปกว่านั้นบอกว่าเราชี้แจงว่าทำไมสิ่งนี้ถึงได้ผล ... ทำไมมันถึงแตกต่างจากเดิมPS1=$(pwd)? (ไม่มีเครื่องหมายคำพูดเลย) โดยที่แตกต่างกันฉันหมายความว่าถ้าฉันใช้อัญประกาศแล้วพรอมต์จะเปลี่ยนไปยังไดเรกทอรีปัจจุบันของฉันในขณะที่ฉันนำทางผ่านสถานี แต่ถ้าฉันไม่ใช้เครื่องหมายคำพูดแล้วพรอมต์จะยังคงอยู่ในไดเรกทอรีที่ฉันอยู่เมื่อฉันป้อนคำสั่งครั้งแรกPS1=$(pwd) ทำไม?
18 bash  zsh  prompt  pwd 

4
วิธีการที่สอดคล้องกับ checkbashisms เพื่อกำหนดเชลล์ปัจจุบัน
ในของ.profileฉันฉันใช้รหัสต่อไปนี้เพื่อให้แน่ใจว่านามแฝงที่เกี่ยวข้องกับ Bash และฟังก์ชั่นมีที่มาเฉพาะถ้าเปลือกเข้าสู่ระบบเป็น Bashจริง: # If the current (login) shell is Bash, then if [ "${BASH_VERSION:-}" ]; then # source ~/.bashrc if it exists. if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi ขณะนี้ฉันกำลังวางไฟล์เชลล์สคริปต์และฟังก์ชั่นการทำงานภายใต้การควบคุมเวอร์ชัน ฉันยังเพิ่งเริ่มต้นขั้นตอนการลบ Bashisms สบายจากสคริปต์เปลือกที่ไม่ได้รับประโยชน์จากคุณลักษณะทุบตีเฉพาะเช่นแทนที่ด้วยfunction funcname()funcname() สำหรับที่เก็บไฟล์เชลล์ของฉันฉันได้กำหนดค่าฮุคล่วงหน้าที่เรียกใช้checkbashismsยูทิลิตี้จากแพ็คเกจ devscriptsของ Debian ในแต่ละshไฟล์ในที่เก็บเพื่อให้แน่ใจว่าฉันไม่ได้แนะนำไวยากรณ์เฉพาะของ Bash โดยไม่ได้ตั้งใจ อย่างไรก็ตามสิ่งนี้ทำให้เกิดข้อผิดพลาดสำหรับ.profile: possible bashism in .profile …

3
ความหมายของ [“ $ {1: 0: 1}” = '-']
ฉันมีสคริปต์ต่อไปนี้เพื่อเริ่มกระบวนการ MySQL: if [ "${1:0:1}" = '-' ]; then set -- mysqld_safe "$@" fi if [ "$1" = 'mysqld_safe' ]; then DATADIR="/var/lib/mysql" ... 1: 0: 1 หมายถึงอะไรในบริบทนี้
18 linux  bash  shell 

2
สิ่งนี้ '&' ในตอนท้ายของคำสั่งของฉันทำให้สคริปต์เร็วขึ้น?
ในขณะที่การแก้ปัญหา CTF ออนไลน์ฉันเจอสถานการณ์ที่ฉันต้องการทำให้เซิร์ฟเวอร์ยุ่งเหยิง นี่คือรหัสที่ฉันเขียน: #!/bin/bash for i in {0..9}{0..9}{0..9}{0..9} do echo "Now trying code.." echo $i echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt done นี้เป็นอย่างเหลือเชื่อช้าเจ็บปวด ฉันต้องลองชุดค่าผสมจาก 1,000 ถึง 9999 และใช้เวลาประมาณ 5 วินาทีต่อการพยายาม 10 ครั้ง จากนั้นทำตามคำแนะนำฉันใส่ '&' ที่ท้ายบรรทัดนี้: echo "a fixed string" $i | nc localhost …

4
ใช้ #! / bin / sh หรือ #! / bin / bash สำหรับ Ubuntu-OSX ที่ใช้งานร่วมกันได้และใช้งานง่าย & POSIX
ฉันรู้ว่าฉันสามารถใช้เป็นบรรทัดแรกของสคริปต์เพื่อเรียกใช้เชลล์ที่ต้องการ จะ#!/bin/shแนะนำถ้าเข้ากันได้กับทุกระบบยูนิกซ์เป็นข้อกำหนดที่แน่นอน? ในกรณีของฉันระบบปฏิบัติการเดียวที่ฉันสนใจคือ Ubuntu (Debian) และ OSX จากที่ฉันสามารถใช้#!/bin/bashและมั่นใจได้ว่ามันจะทำงานบนทั้งสองระบบ? นี่จะทำให้การใช้สคริปต์ที่ง่ายขึ้นและมีไวยากรณ์ที่ทันสมัยและชัดเจนยิ่งขึ้นสำหรับคำสั่งหรือไม่ การใช้#!/bin/shยังเกี่ยวข้องกับการใช้ POSIX หรือไม่
18 bash  shell  ubuntu  osx  posix 

3
ฉันจะแสดงรายการตัวแปรเชลล์ทั้งหมดได้อย่างไร
อ่านเกี่ยวกับคำถามนี้: ใน zsh ฉันจะแสดงรายการตัวแปรสภาพแวดล้อมทั้งหมดได้อย่างไร? ฉันสงสัยว่าฉันจะแสดงรายการตัวแปรเชลล์ทั้งหมดได้อย่างไร นอกจากนี้ความแตกต่างระหว่างตัวแปรเชลล์และตัวแปรสภาพแวดล้อมใช้กับเชลล์อื่นที่ไม่ใช่ zsh หรือไม่ ฉันสนใจ Bash และ Zsh เป็นหลัก แต่ก็เป็นการดีที่ได้ทราบว่าจะทำสิ่งนี้ได้อย่างไรในกระสุนหลักอื่น ๆ

2
ทำไมตัวแปรจึงมองเห็นได้ใน subshell
Learning Bash Book กล่าวถึงว่า subshell จะสืบทอดเฉพาะตัวแปรสภาพแวดล้อมและ file descriptors ฯลฯ และจะไม่รับสืบทอดตัวแปรที่ไม่ได้ถูกส่งออก: $ var=15 $ (echo $var) 15 $ ./file # this file include the same command echo $var $ ฉันรู้ว่าเชลล์จะสร้างสอง subshell สำหรับ()และ for ./fileแต่ทำไมใน()กรณีที่ subshell ระบุvarตัวแปรแม้ว่าจะไม่ถูกส่งออกและใน./fileกรณีที่มันไม่ได้ระบุมัน? # Strace for () clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f24558b1a10) = 25617 # Strace for ./file clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, …
18 bash  shell  subshell 

4
วิธีที่สั้นที่สุดในการแทนที่อักขระในตัวแปร
มีหลายวิธีในการแทนที่อักขระในตัวแปร วิธีที่สั้นที่สุดที่ฉันค้นพบคือtr: OUTPUT=a\'b\"c\`d_123and_a_lot_more OUTPUT=$(echo "$OUTPUT"|tr -d "'\`\"") echo $OUTPUT มีวิธีที่เร็วกว่านี้ไหม และนี่คือข้อความที่ปลอดภัยสำหรับคำพูดเช่น', "และ `ตัวเอง?
18 bash  string  variable 


2
การเขียนสคริปต์แบบพกพามีความสำคัญเมื่อใด
รหัสส่วนใหญ่ฉันเขียนอยู่ใน PHP ฉันเพิ่งเริ่มเรียนรู้การเขียนสคริปต์เชลล์ ทรัพยากรและแบบฝึกหัดส่วนใหญ่ที่ฉันเจอนั้นเฉพาะเจาะจงกับ Bash บางคนเตือนเกี่ยวกับ bashisms และบางคนไม่ทำ ฉันอ่านมากที่นี่และ Stack Overflow เมื่อใดก็ตามที่คำตอบใช้bashismsบางคนย่อมแสดงความคิดเห็นว่า: คุณไม่ควรใช้ <insert bashism ที่นี่> มันไม่ได้พกพา bashนี้เกิดขึ้นแม้ในขณะที่คำถามที่ได้รับการติดแท็กด้วย สำหรับฉันแล้วมันเหมือนกับบอกโปรแกรมเมอร์ PHP ว่าพวกเขาไม่ควรใช้รหัสที่ใหม่ใน PHP 5 เพราะมันไม่สามารถใช้กับ PHP 4 หรือบอกคนที่พวกเขาไม่ควรเขียนอะไรบางอย่างสำหรับ Mac เพราะมันไม่สามารถใช้ บน Windows เมื่อผมเขียนใน PHP, ฉันได้รับความต้องการขั้นต่ำและที่ผมเขียนไปข้างหน้ารหัสใช้ได้กับระบบปฏิบัติการ ฉันไม่ต้องกังวลกับการทำให้ย้อนกลับ -เข้ากันได้ ถ้าฉันใช้#!/bin/bashเป็นสาวเธอทำไมฉันไม่ควรใช้วิธีการทุบตี? ฉันเริ่มที่จะได้รับความประทับใจที่บางคนชอบทุบตี bashisms (ปุนตั้งใจ) เพียงเพื่อประโยชน์ของมัน ผู้คนมักจะใช้bashและใช้shellแทนกันได้ - อาจเป็นเพราะการทุบตีเป็นเชลล์เริ่มต้นในหลาย ๆ ระบบ ดังนั้นฉันสามารถเข้าใจการเพิ่มความคิดเห็นเพื่อเตือนว่ารหัสใช้ bashisms แต่ฉันไม่เข้าใจความหมายที่ผิดที่จะใช้พวกเขา เห็นได้ชัดว่าถ้าฉันเขียนสคริปต์อย่างเคร่งครัดเพื่อใช้ส่วนตัวฉันสามารถเขียนเป็นภาษาใดก็ได้ที่ฉันต้องการ …

2
วิธีการเขียนฟังก์ชั่นทุบตีโดยใช้ท่อ?
ฉันมีฟังก์ชั่นบางอย่างที่กำหนดไว้ในแบบนี้: function f { read and process $1 ... echo $result } ฉันต้องการที่จะประกอบมันเข้าด้วยกันเพื่อที่การภาวนาจะเป็นเช่นf | g | hนั้น ฉันใช้สำนวนอะไรในการแปลงฟังก์ชั่นที่ทำงานกับข้อโต้แย้งเป็นหนึ่งข้อโต้แย้งการอ่านจาก stdin? เป็นไปได้ไหมที่จะอ่านคู่ tuples ของการขัดแย้งจากกระแสโดยไม่จำเป็นต้องหลบหนีพวกมัน (เช่นการยกเลิก null)?

8
แยก JSON โดยใช้ Python หรือไม่
ฉันมีไฟล์ JSON members.jsonดังต่อไปนี้ { "took": 670, "timed_out": false, "_shards": { "total": 8, "successful": 8, "failed": 0 }, "hits": { "total": 74, "max_score": 1, "hits": [ { "_index": "2000_270_0", "_type": "Medical", "_id": "02:17447847049147026174478:174159", "_score": 1, "_source": { "memberId": "0x7b93910446f91928e23e1043dfdf5bcf", "memberFirstName": "Uri", "memberMiddleName": "Prayag", "memberLastName": "Dubofsky" } }, { "_index": "2000_270_0", "_type": …
18 bash  python  json 

2
วิธีการเรียงลำดับผลลัพธ์จากคำสั่ง ls ตามวันที่แก้ไข (ไดเรกทอรีแรก)?
ฉันสามารถยิงได้ ls -lrt เพื่อรับไฟล์และโฟลเดอร์เรียงตามวันที่แก้ไข แต่ไม่ได้แยกไดเรกทอรีจากไฟล์ ฉันต้องการที่lsจะแสดงไดเรกทอรีแรกโดยวันที่แก้ไขแล้วไฟล์ตามวันที่แก้ไข ทำอย่างไร
18 linux  bash  ls  sort 

1
cp: ไม่สามารถ stat `/vol/examples/tutorial/science.txt ': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
ฉันลองคำสั่งcp /vol/examples/tutorial/science.txt .แล้วก็พบข้อผิดพลาด - cp: cannot stat `/vol/examples/tutorial/science.txt': No such file or directory ฉันไม่เข้าใจว่าทำไมสิ่งนี้จึงเกิดขึ้น ฉันไปที่โฟลเดอร์บ้าน cygwin และสร้างโครงสร้างโฟลเดอร์ที่จำเป็นและไฟล์ข้อความ ฉันตรวจสอบโครงสร้างโฟลเดอร์และชื่อด้วย นอกจากนี้ฉันไป~/vol/examples/tutorialแล้วcat science.txtและฉันสามารถอ่านเอกสาร ถ้าอย่างนั้นทำไมคำสั่ง CP ถึงใช้งานไม่ได้?
18 bash  filenames 

2
ดูคุณสมบัติ / คุณสมบัติไฟล์ dll และ exe ผ่านทางบรรทัดคำสั่ง
ฉันต้องการดูคุณสมบัติไฟล์เพิ่มเติมสำหรับไฟล์ exe และ dll ถ้าฉันเปิด windows explorer และเพิ่มคอลัมน์เพิ่มเติมลงในมุมมองของฉันฉันสามารถเห็นสิ่งต่าง ๆ เช่น บริษัท ลิขสิทธิ์ชื่อผลิตภัณฑ์และรุ่นผลิตภัณฑ์เมื่อมีอยู่สำหรับไฟล์นั้น ข้อมูลนี้พร้อมใช้งานผ่าน windows explorer ดังนั้นจึงมีเหตุผลว่าในขณะที่ data / string อาจมีอยู่ในไฟล์เองฉันควรจะสามารถดึงข้อมูลนั้นผ่าน command line ใน linux ฉันได้ลองใช้ 'strings' แต่ได้พบกับความสำเร็จที่ จำกัด ไฟล์ที่ฉันรู้ว่าทุกเขตข้อมูลดังกล่าวฉันไม่สามารถเห็นด้วย 'สตริง' ฉันหวังว่าบางคนอาจมีทางเลือกอื่น บางทีสิ่งที่ฉันยังไม่ได้คิดเพื่อดูข้อมูลนี้
18 linux  bash  files 

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