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

Dash shell ซึ่งเป็นอนุพันธ์ที่สอดคล้องกับ POSIX ของ Almquist shell ที่ใช้เป็น / bin / sh ใน Debian, Ubuntu และ Linux อื่น ๆ

4
เส้นประหรือเปลือกอื่น ๆ “ เร็วขึ้น” กว่าทุบตีหรือไม่
ฉันคิดเสมอว่าประโยชน์เพียงอย่างเดียวของการใช้เครื่องหมายขีดคั่นแทนการทุบตีก็คือเส้นประนั้นเล็กลงและดังนั้นกรณีของเส้นประจะเริ่มเร็วขึ้นในเวลาบูต แต่ฉันได้ทำการวิจัยมาแล้วและพบว่ามีคนบางคนย้ายสคริปต์ทั้งหมดของพวกเขาไปที่หวังว่าพวกเขาจะทำงานได้เร็วขึ้นและฉันก็พบสิ่งนี้ในบทความDashAsBinShใน Ubuntu Wiki: เหตุผลสำคัญที่จะเปลี่ยนเปลือกเริ่มต้นได้อย่างมีประสิทธิภาพ bash เป็นกระสุนเต็มรูปแบบที่ยอดเยี่ยมเหมาะสำหรับการใช้แบบโต้ตอบ; แท้จริงมันยังคงเป็นเปลือกเข้าสู่ระบบเริ่มต้น อย่างไรก็ตามมันค่อนข้างใหญ่และช้าในการเริ่มต้นและใช้งานโดยเปรียบเทียบกับเส้นประ ทุกวันนี้ฉันใช้สคริปต์ทุบตีมากมายหลายอย่างในระบบของฉันและปัญหาของฉันคือฉันมีสคริปต์เฉพาะที่ฉันทำงานอย่างต่อเนื่อง 24/7 ที่วางไข่เด็กประมาณ 200 คนซึ่งคอมพิวเตอร์ของฉันร้อนขึ้น 10 ° C มากกว่าการใช้งานปกติ มันเป็นสคริปต์ที่ค่อนข้างใหญ่ที่มี bashisms จำนวนมากดังนั้นการย้ายไปที่ POSIX หรือเชลล์อื่น ๆ ใช้เวลานานมาก (และ POSIX ไม่สำคัญสำหรับการใช้งานส่วนตัว) แต่มันจะคุ้มค่าถ้าฉันสามารถลดบางสิ่งนี้ การใช้งาน CPU ฉันรู้ว่ายังมีสิ่งอื่น ๆ ที่จะต้องพิจารณาเช่นการเรียกไบนารีภายนอกเช่นsedสำหรับ bashism ง่ายๆเช่น${foo/bar}หรือแทนgrep=~ TL; DRทุบตีช้ากว่าจริง ๆ เมื่อเริ่มต้นและใช้งานเมื่อเปรียบเทียบกับขีดกลางหรือไม่ มี Unix shell อื่น ๆ ซึ่งมีประสิทธิภาพมากกว่าการทุบตีหรือไม่?
57 bash  performance  dash 

5
ทำไมไม่มีใครใช้เชลล์เป้าหมายที่แท้จริงเป็น / bin / sh?
ฉันสังเกตเห็นว่าโดยทั่วไปไม่มีระบบใดที่ฉันเคยทำงานด้วย/bin/shเหมือนเป็นการปฏิบัติการจริง มันเสมอ symlink ไปdash, bashในโหมด POSIX หรือสิ่งที่คล้ายกัน ทำไม? อะไรคือข้อเสียของการใช้ของจริงที่เป็นต้นฉบับ/bin/sh? (ความเร็วใบอนุญาต?)
55 shell  history  dash 

4
วิธีเลียนแบบการทดแทนกระบวนการใน Dash ได้อย่างไร
ในbashฉันสามารถใช้การทดแทนกระบวนการและปฏิบัติต่อผลลัพธ์ของกระบวนการราวกับว่ามันเป็นไฟล์ที่บันทึกไว้ในดิสก์: $ echo <(ls) /dev/fd/63 $ ls -lAhF <(ls) lr-x------ 1 root root 64 Sep 17 12:55 /dev/fd/63 -> pipe:[1652825] dashน่าเสียดายที่กระบวนการชดเชยไม่ได้รับการสนับสนุนใน อะไรจะเป็นวิธีที่ดีที่สุดที่จะเลียนแบบได้อย่างรวดเร็วProcess Substitution? ฉันไม่ต้องการบันทึกผลลัพธ์เป็นไฟล์ชั่วคราวที่ไหนสักแห่ง ( /tmp/) แล้วต้องลบมันออก มีวิธีอื่นไหม?

1
คำสั่งที่เกี่ยวข้องกับเลขคณิตคู่, Dash, POSIX เชลล์, sh, Increment
เมื่อก่อน / หลังการเพิ่มตัวแปรใน POSIX Shell ความแตกต่างระหว่างสองตัวอย่างนี้คืออะไร พวกเขาดูเหมือนว่าพวกเขาจะมีผลที่เหมือนกัน แต่พวกเขาจะใช้แตกต่างกันอย่างไร เมื่อไหร่ที่คุณจะชอบอีกอันหนึ่ง? X=$((X+1)) : $((X=X+1))

1
เปอร์เซ็นต์ในตัวแปรสภาพแวดล้อม $ PATH
$ PATH ของฉันมีลักษณะดังนี้: /home/torbjorr/deployed/vector/x86_64-GNU%2fLinux:/home/torbjorr/deployed/typewriter/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mustudio/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mathext/x86_64-GNU%2fLinux:/home/torbjorr/deployed/doxymax/x86_64-GNU%2fLinux:/home/torbjorr/deployed/c2tex/x86_64-GNU%2fLinux:/home/torbjorr/deployed/x86_64-GNU%2fLinux/wand:/home/torbjorr/deployed/x86_64-GNU%2fLinux/spellesc:/home/torbjorr/deployed/x86_64-GNU%2fLinux/projinit:/home/torbjorr/deployed/x86_64-GNU%2fLinux/herbs:/home/torbjorr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games ในทุบตีฉันสามารถไม่มีปัญหาเรียกคันตั้งอยู่ใน /home/torbjorr/deployed/x86_64-GNU%2fLinux/wand ชอบ $ wand (i) Mål från "main.cpp" har registrerats (i) Skapar katalog "__wand_targets_dbg" (i) Kör g++ "main.cpp" -fpic -L"/home/torbjorr/deployed" -g -Wall -std=c++11 -I"/home/torbjorr/deployed" -o "__wand_targets_dbg/cb-template อย่างไรก็ตามในโหมดความเข้ากันได้ของเชลล์ bourne ไม่พบไม้กายสิทธิ์: $ wand sh: 2: wand: not found ดูเหมือนว่าปัญหาคือเครื่องหมาย% ในพา ธ เหล่านี้ เครื่องหมายนี้ได้รับการเพิ่มโดยการเข้ารหัส URL เพื่อให้สามารถใช้ชื่อ "GNU / …
16 shell  path  dash  ash 

2
Dash, Ash และ sh รองรับสคริปต์ได้ 100% หรือไม่
ฉันต้องการทราบว่าสคริปต์ที่เขียนขึ้นสำหรับเส้นประเถ้าและ sh เข้ากันได้ 100% หรือไม่ มีฟีเจอร์ที่เพิ่มเข้ามาเพื่อขีดหรือเถ้าหรือการเปลี่ยนแปลงทางไวยากรณ์หรือไม่? จากสิ่งที่ฉันได้ยินเถ้าเป็นลูกหลานของดวลจุดโทษโดยตรง

2
อะไรคือความแตกต่างระหว่าง: และจริง
ในbash: $ type : : is a shell builtin $ type true true is a shell builtin ดูเหมือนว่าพวกเขาจะเหมือนกัน แต่พวกเขาไม่ได้ให้ระบบการสืบค้นกลับที่เหมือนกัน: $ strace : strace: :: command not found $ strace true execve("/bin/true", ["true"], [/* 82 vars */]) = 0 [snip] exit_group(0) = ? ฉันพยายามทำให้แตกต่างstrace bash -c : 2>:.txtและstrace bash -c true …
15 bash  dash 

2
คั่นเนมสเปซสำหรับฟังก์ชั่นและตัวแปรในเชลล์ POSIX
ในเส้นประฟังก์ชั่นและตัวแปรดูเหมือนจะอยู่ในเนมสเปซที่แยกต่างหาก: fn(){ fn="hello world" } fn; echo "The value is $fn!" #prints: The value is hello world! fn; echo "The value is $fn!" #prints: The value is hello world! #the fn variable doesn't conflict with the fn function นี่เป็นคุณลักษณะเฉพาะหรือการรับประกัน POSIX หรือไม่
13 shell  posix  dash 

7
/ bin / dash: ตรวจสอบว่า $ 1 เป็นตัวเลขหรือไม่
อะไรจะเป็นวิธีที่ดีที่สุดในการตรวจสอบว่า $ 1 เป็นจำนวนเต็มใน / bin / dash หรือไม่ ในทุบตีฉันสามารถทำ: [[ $1 =~ ^([0-9]+)$ ]] แต่ดูเหมือนจะไม่เป็นไปตาม POSIX และ dash ไม่สนับสนุนสิ่งนั้น

4
แยกสตริงบนโคลอนใน / bin / sh
dashสคริปต์ของฉันใช้พารามิเตอร์ในรูปแบบของhostname:portคือ: myhost:1234 ในขณะที่พอร์ตเป็นทางเลือกเช่น: myhost ฉันต้องอ่านโฮสต์และพอร์ตเป็นตัวแปรแยกต่างหาก ในกรณีแรกฉันทำได้: HOST=${1%%:*} PORT=${1##*:} แต่นั่นจะไม่ทำงานในกรณีที่สองเมื่อพอร์ตถูกละเว้น echo ${1##*:}เพียงแค่ส่งคืนชื่อโฮสต์แทนที่จะเป็นสตริงว่าง ใน Bash ฉันสามารถทำได้: IFS=: read A B <<< asdf:111 dashแต่นั่นไม่ได้ทำงานใน ฉันสามารถแยกสตริงบน:ในประโดยไม่ต้องเรียกใช้โปรแกรมภายนอก ( awk, trฯลฯ )?
9 shell  string  dash 

2
การเปลี่ยนเส้นทางไฟล์ bash เป็นมาตรฐานแตกต่างจาก shell (`sh`) บน Linux อย่างไร
ฉันเขียนสคริปต์ที่สลับผู้ใช้ในขณะที่ทำงานและดำเนินการโดยใช้การเปลี่ยนเส้นทางไฟล์ไปที่มาตรฐานระบบดังนั้นจึงuser-switch.shเป็น ... #!/bin/bash whoami sudo su -l root whoami และการวิ่งด้วยbashทำให้ฉันมีพฤติกรรมที่ฉันคาดหวัง $ bash < user-switch.sh vagrant root อย่างไรก็ตามถ้าฉันรันสคริปต์ด้วยshฉันจะได้ผลลัพธ์ที่ต่างออกไป $ sh < user-switch.sh vagrant vagrant ทำไมจึงbash < user-switch.shให้ผลลัพธ์ที่แตกต่างกว่าsh < user-switch.sh? หมายเหตุ: เกิดขึ้นในสองกล่องที่แตกต่างกันที่ใช้ Debian Jessie

3
Dash เทียบเท่ากับการเปลี่ยนเส้นทางของสคริปต์เอาต์พุต
ใน Bash คุณสามารถเปลี่ยนทิศทางเอาต์พุต stdout ในอนาคตทั้งหมดของสคริปต์ที่รันอยู่ในปัจจุบัน ตัวอย่างเช่นกับสคริปต์นี้ exec > >(logger -t my-awesome-script) echo 1 echo 2 echo 3 สิ่งนี้จะจบลงใน syslog: Oct 26 01:03:16 mybox my-awesome-script[72754]: 1 Oct 26 01:03:16 mybox my-awesome-script[72754]: 2 Oct 26 01:03:16 mybox my-awesome-script[72754]: 3 แต่นี่เป็นข้อมูลเฉพาะของ Bash และการดำเนินการเปลือยกายด้วยการเปลี่ยนเส้นทางดูเหมือนจะไม่ทำงานใน Dash Syntax error: redirection unexpected ฉันจะทำให้มันทำงานใน Dash หรืออาจเป็นได้ทั้งใน shells?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.