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

เชลล์เป็นอินเตอร์เฟสบรรทัดคำสั่งของ Unix คุณสามารถพิมพ์คำสั่งในเชลล์แบบโต้ตอบหรือเขียนสคริปต์เพื่อทำงานอัตโนมัติ ใช้แท็กนี้สำหรับคำถามที่ใช้กับ / bin / sh และเชลล์ที่เข้ากันได้มากที่สุด (ash, bash, ksh, zsh, …) สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาดโปรดตรวจสอบใน http://shellcheck.net ก่อนโพสต์ที่นี่

2
รายการองค์ประกอบที่มีช่องว่างใน zsh
ฉันได้ศึกษา zsh scripting เป็นเวลา 2 ชั่วโมงแล้วและฉันก็ตีกำแพง ฉันต้องการดูรายการไฟล์ที่อาจมีช่องว่างอยู่ ฉันเปิดให้วิธีที่แตกต่างอย่างสิ้นเชิงกว่าตัวอย่างต่อไปนี้ตราบใดที่พวกเขากำลัง zsh เนื่องจาก zsh คือสิ่งที่ฉันกำลังศึกษาไม่ใช่งานที่ฉันพยายามเขียน files=(`ls`) for f in $files; do print $f done เห็นได้ชัดว่าฉันไม่เพียงแค่สร้างlsใหม่ฉันแค่ต้องการ$fจับชื่อไฟล์ทั้งหมดในแต่ละการวนซ้ำของลูป
10 shell  scripting  zsh 

2
ส่งงานไปที่พื้นหลังใน“ ถ้า”
ทำไมนี้ if true; then sleep 3 &; fi bash: syntax error near unexpected token `;' ฉันต้องการวิ่ง sleep 3 ในพื้นหลังเพื่อให้คำสั่ง ["sleep 3" เป็นเพียงตัวอย่าง] จะทำงานในสไตล์ "paralell" ดังนั้นจึงเสร็จเร็วขึ้น แต่ฉันได้รับสิ่งนี้: bash: syntax error near unexpected token `;' ข้อความผิดพลาด. ทำไม? ทำไมฉันไม่สามารถส่งงานไปที่พื้นหลังได้?

6
วิธีการพกพาเพื่อค้นหาหมายเลขไอโหนด
ตอนแรกฉันใช้stat -c %i file(เพื่อตรวจจับการปรากฏตัวของคุก ) ซึ่งดูเหมือนว่าจะทำงานกับการกระจาย Linux ใด ๆ ภายใต้ดวงอาทิตย์ บน OS X' ls -i file | cut -d ' ' -f 1ผมต้องใช้ มีวิธีการบางอย่างเพื่อหาหมายเลขไอโหนดของไฟล์ในสคริปต์เชลล์ซึ่งเป็นแบบพกพาข้ามแพลตฟอร์มระวัง * และไม่ได้ขึ้นอยู่กับตามอำเภอใจฉาวโฉ่ls?
10 shell  inode 


3
ทำไม“ she-bang” เริ่มต้นด้วย“ #!”
ทำไม "เธอปัง" เริ่มต้นด้วย#!เช่น#!/bin/bash? ฉันยอมรับเสมอว่านี่เป็นวิธีที่ทำได้ แต่มีเหตุผลอยู่เบื้องหลังหรือไม่ ทำไมเริ่มต้นด้วย#; นั่นไม่ใช่ความคิดเห็นใช่ไหม หรือเป็นประเด็นที่ควรแสดงความคิดเห็น?
10 shell  history  shebang 

3
วิธีปฏิบัติที่ดีที่สุดในการใช้ $? ในทุบตี?
เมื่อฉันอ่านคำตอบนี้เกี่ยวกับ $? คำถามอื่นอยู่ในใจ มีวิธีปฏิบัติที่ดีที่สุดสำหรับวิธีใช้ $ หรือไม่ ในทุบตี? ลองมาตัวอย่าง: เรามีสคริปต์แบบเส้นตรงและฉันต้องการทราบว่าคำสั่งทั้งหมดจะทำงานได้ดี คุณคิดว่าเป็นการดีไหมที่จะเรียกใช้ฟังก์ชั่นเล็ก ๆ (ลองเรียกมันว่า "did_it_work") เพื่อตรวจสอบรหัสข้อผิดพลาดและแตกถ้าไม่ได้ #!/bin/bash function did_it_work { code=$1 if [ "$code" -ne "0" ] then echo "Error failure: code $code " exit 1 fi } dir=some/path mkdir -p $dir did_it_work $? cd $dir did_it_work $? run_some_command did_it_work $? แน่นอนว่าวิธีการนี้หมายความว่าฉันต้องแก้ไขปัญหาด้วยตนเองหากมีและเรียกใช้สคริปต์อีกครั้ง …

5
IFS (Internal Field Separator) ทำหน้าที่เป็นตัวคั่นเดี่ยวสำหรับตัวคั่นหลายตัวต่อเนื่องกันได้หรือไม่?
การแยกอาร์เรย์โดยใช้ IFS ด้วยค่าที่ไม่ใช่ขาวสร้างองค์ประกอบที่ว่างเปล่า แม้แต่การใช้tr -sเพื่อย่อขนาด delim หลาย ๆ ตัวเป็น delim เดียวก็ไม่เพียงพอ ตัวอย่างอาจอธิบายปัญหาได้ชัดเจนยิ่งขึ้น .. มีวิธีการที่จะบรรลุผลลัพธ์ "ปกติ" ผ่าน tweaking ของ IFS (มีการตั้งค่าที่เกี่ยวข้องเพื่อเปลี่ยนพฤติกรรมของ IFS หรือไม่? ไอเอฟเอ var=" abc def ghi " echo "============== IFS=<default>" arr=($var) for x in ${!arr[*]} ; do echo "# arr[$x] \"${arr[x]}\"" done # sfi="$IFS" ; IFS=':' set -f # …
10 bash  shell  scripting 

5
sh ไฟล์เริ่มต้นผ่าน ssh
ฉันมีคำสั่งที่สำคัญบางอย่างที่ฉันต้องเรียกใช้ก่อนที่เชลล์ sh จะเริ่มทำงาน สิ่งนี้จำเป็นสำหรับการส่งคำสั่ง SSH ในคำสั่ง SSH ( ssh host somecommand) และโปรแกรมอื่น ๆ ที่เรียกใช้คำสั่ง ในฉัน.profileฉันมีสิ่งนี้: ihammerhands@wreckcreations:~> cat .profile #specific environment and startup programs export PS1="\u@wreckcreations:\w> " export PYTHONPATH=~/python/lib/python2.4/site-packages export PATH=$PATH:~/bin:~/python/bin อย่างไรก็ตามสิ่งนี้ล้มเหลว: W:\programming\wreckcreations-site\test-hg>ssh name@host echo $PATH Enter passphrase for key '/home/Owner/.ssh/id_rsa': /usr/local/bin:/bin:/usr/bin สังเกตเห็นตัวเลือก PATH ที่หายไป ชื่อที่เหมาะสมสำหรับโปรไฟล์ sh คืออะไร? หมายเหตุ: ฉันไม่สามารถเข้าถึงรูทและไม่ต้องการให้สิ่งนี้ใช้กับผู้ใช้รายอื่น มีวิธีอื่นในการทำเช่นนี้หรือไม่? …
10 bash  ssh  shell  profile 

3
ฉันจะรับรายการและลบออกจากไฟล์ได้อย่างไร
ฉันมีรายชื่อโดเมนจำนวนมากที่ฉันต้องลบออกจาก / etc / remotedomains พวกมันอาจจะไม่เรียงตามลำดับใด ๆ ในไฟล์ แต่ละโดเมนอยู่บนบรรทัดเดียว ฉันจะวนซ้ำในรายการและค้นหาบรรทัดนั้นในโดเมนระยะไกลและลบออกได้อย่างไร


2
ทำไมกลุ่มคำสั่ง brace ต้องการช่องว่างหลังจากเปิดวงเล็บปีกกาใน POSIX Shell Grammar
TL; DR : ทำไมช่องว่างกลุ่ม POSIX รั้งจำเป็นหลังจาก{คำสงวน แต่ subshell ไม่หลังจากคำสงวน(? ไวยากรณ์ของ POSIX เชลล์กำหนดกลุ่มวงเล็บปีกกาและ subshell ดังนี้ brace_group : Lbrace compound_list Rbrace subshell : '(' compound_list ')' ทีนี้ถ้าเราอ่านว่าช่องว่างนั้นสำคัญมาก นี่หมายความว่าจะต้องมีพื้นที่ที่แยกเปิดและปิดวงเล็บปีกกาและวงเล็บเช่นเดียวกับใน { echo hello world; } ( echo hello world ) สิ่งนี้จะสอดคล้องกับคำสั่งคำสั่งผสม : คำสั่งผสมเหล่านี้แต่ละคำมีคำที่สงวนไว้หรือผู้ดำเนินการควบคุมในตอนเริ่มต้นและคำที่สงวนไว้สำหรับคำสั่งสุดท้ายหรือคำว่าผู้ประกอบการที่เกี่ยวข้องในตอนท้าย อย่างไรก็ตามสิ่งที่ไม่สมเหตุสมผลคือเหตุผล(list)และ( list )ทำงานได้ดี ( (ไม่จำเป็นต้องใช้พื้นที่นั้นหลังจากนั้น) อย่างไรก็ตามการขยายตัวของรั้งต้องมีพื้นที่ชั้นนำเช่น{echo hello;}ไม่ทำงาน แน่นอนว่าคำที่สงวนไว้ซึ่งได้รับการปฏิบัติเหมือนคำว่าเชลล์จำเป็นต้องเว้นวรรคเพื่อให้สอดคล้องกับแนวคิดของการแยกฟิลด์อย่างไรก็ตามคำจำกัดความของตัวเองไม่ได้พูดถึงช่องว่าง นอกจากนี้หาก{และ(ทั้งคู่ถือว่าคำที่สงวนไว้โดยนิยาม POSIX ของคำสั่งผสมทำไมพวกเขาถึงได้รับการปฏิบัติที่แตกต่างกันเกี่ยวกับอักขระช่องว่างหลังจากคำที่สงวนไว้เหล่านี้? …
10 shell  posix  subshell  syntax 

1
วิธีการเปลี่ยนเปลือกเริ่มต้นใน NixOS?
ในขณะที่ฉันต้องตั้งเปลือกปลาที่จะเริ่มต้นเปลือกของฉันใน NixOS และไม่มีเอกสารอย่างเป็นทางการเกี่ยวกับวิธีการทำที่declaratively (ไม่ได้โดยการทำงานchsh) ใน NixOS
10 shell  fish  nixos 

6
การค้นหาเชลล์เริ่มต้นของผู้ใช้ภายในเชลล์สคริปต์
ฉันสงสัยว่ามีวิธีหาเชลล์เริ่มต้นของผู้ใช้ปัจจุบันภายในเชลล์สคริปต์หรือไม่? กรณีการใช้งาน: ฉันกำลังทำงานกับสคริปต์ที่ตั้งค่านามแฝงสำหรับคำสั่งและนามแฝงนี้ตั้งอยู่ภายในเปลือกสคริปต์ !# /bin/bash alias = 'some command to set the alias' มีตรรกะในสคริปต์ที่พยายามค้นหาเชลล์เริ่มต้นของผู้ใช้ที่รันสคริปต์และเพิ่มชื่อแทนนี้ในไฟล์ ~ / .bashrc หรือ ~ / .zshrc ที่เกี่ยวข้อง แต่เมื่อฉันเพิ่ม Shebang ไว้ด้านหน้าสคริปต์และขอให้มันใช้ bash อย่างชัดเจนคำตอบที่โพสต์ที่นี่จะส่งคืน bash ตามที่คาดไว้แม้ว่าฉันจะเรียกใช้สคริปต์นี้บนเทอร์มินัล ZSH มีวิธีรับเชลล์ประเภทที่สคริปต์ทำงานหรือไม่โดยไม่คำนึงถึงชุด Shebang? ฉันกำลังมองหาโซลูชันที่ใช้งานได้ทั้งบน Mac และลินุกซ์ทั้งหมด

5
grep เอาต์พุตสี: ไม่ใช่ GREP_OPTIONS ไม่ใช่นามแฝง
grepฉันต้องการส่งออกสี .... แต่ กลยุทธ์ที่ 1: GREP_OPTIONS แต่นี่เลิกใช้แล้ว ดูhttp://www.gnu.org/software/grep/manual/html_node/Environment-Variables.html Stragegy 2: GREP_COLORS ดูเหมือนโซลูชันตั้งแต่แรกเห็น แต่สิ่งนี้แตกต่าง กลยุทธ์ที่ 3: นามแฝง สิ่งนี้ไม่ได้ผลfind ... | xargs grepเนื่องจาก xargs ไม่ได้ประเมินชื่อแทน กลยุทธ์ที่ 4: เขียนสคริปต์ตัวคลุมแบบเรียบง่าย ไม่ฉันคิดว่านี่สกปรกเกินไปและสร้างปัญหามากกว่าที่จะแก้ไขได้ กลยุทธ์ที่ 5: แก้ไขซอร์สโค้ด กลยุทธ์ที่ 6: ติดต่อผู้พัฒนา grep, ขอการเปลี่ยน GREP_OPTIONS กลยุทธ์ NICE-and-EASY: ... นี่หายไป ฉันไม่มีเงื่อนงำ วิธีแก้ปัญหานี้ ขอบคุณที่พยายามช่วย! ... แต่ฉันไม่สามารถให้รางวัลได้ โทรหาฉันหยาบคาย arogant ดูถูกเหยียดหยาม .... ฉันเห็นเฉพาะการแก้ไข …
10 shell  grep  colors 

5
ทางเลือกมาตรฐานแบบไม่ใช้เวลามาตรฐานสากล? [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา สำหรับการเปรียบเทียบครั้งเรียกใช้สคริปต์ระหว่างเปลือกหอยแตกต่างกันบางคำตอบ SE แนะนำให้ใช้bash's ในตัว timeคำสั่งเช่นดังนั้น: time bash -c 'foo.sh' time dash -c 'foo.sh' ... ฯลฯให้ทุกเชลล์ทำการทดสอบ มาตรฐานดังกล่าวล้มเหลวในการกำจัดเวลาที่แต่ละเปลือกโหลดและเริ่มต้นตัวเอง ตัวอย่างเช่นสมมติว่าทั้งสองคำสั่งดังกล่าวถูกจัดเก็บไว้ในอุปกรณ์ช้ากับความเร็วในการอ่านของฟล็อปปี้ดิสก์ต้น (124KB / s), dash(ก~ 150Kปฏิบัติการ) จะโหลดประมาณ7 เท่าเร็วกว่าbash( ~ 1M ) เปลือก เวลาในการโหลดจะเอียงtimeตัวเลข - เวลาก่อนการโหลดของกระสุนเหล่านั้นไม่เกี่ยวข้องกับการวัดเวลาการทำงานของfoo.shใต้แต่ละเชลล์หลังจากกระสุนถูกโหลดแล้ว แบบพกพาและยูทิลิตี้ทั่วไปที่ดีที่สุดในการรันสำหรับกำหนดเวลาสคริปต์ที่สามารถเรียกใช้จากภายในแต่ละเชลล์คืออะไร ดังนั้นโค้ดด้านบนจะมีลักษณะดังนี้: bash -c 'general_timer_util foo.sh' dash -c 'general_timer_util foo.sh' หมายเหตุ: ไม่มีคำสั่งในตัวของ …

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