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

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

1
Bash จะจำเส้นทางที่ผิดไปยังโปรแกรมที่ถูกย้าย / ลบ
เมื่อฉันทำ which pip3 ฉันเข้าใจ /usr/local/bin/pip3 แต่เมื่อฉันพยายามที่จะดำเนินการpip3ฉันได้รับข้อผิดพลาดดังต่อไปนี้: bash: /usr/bin/pip3: No such file or directory นี่เป็นเพราะฉันเพิ่งลบไฟล์นั้น ตอนนี้whichจุดที่คำสั่งรุ่นของผู้อื่นpip3ที่อยู่ใน/usr/local/binแต่เปลือกยังคงจำเส้นทางที่ผิด ฉันจะทำให้มันลืมเส้นทางนั้นได้อย่างไร whichคู่มือบอกว่า which returns the pathnames of the files (or links) which would be executed in the current environment, had its arguments been given as commands in a strictly POSIX-conformant shell. It does this by …
29 bash  path  which 

3
วิธีตรวจสอบการใช้ ulimit
มีวิธีการตรวจสอบการใช้ ulimits สำหรับผู้ใช้ที่กำหนดหรือไม่? ฉันรู้ว่าคุณสามารถเปลี่ยน ulimits สำหรับกระบวนการเดียวเมื่อคุณเริ่มต้นขึ้นหรือสำหรับเชลล์เดี่ยวเมื่อทำงาน แต่ฉันต้องการที่จะสามารถ "ตรวจสอบ" ว่าผู้ใช้ปิดการ จำกัด ขีด จำกัด ของพวกเขาได้อย่างไร ฉันกำลังวางแผนในการเขียนbashสคริปต์ที่จะรายงานกลับไปที่ statsd เปอร์เซ็นต์การใช้งานปัจจุบัน โดยเฉพาะฉันต้องการติดตาม: เปิดไฟล์ ( ulimit -n) กระบวนการของผู้ใช้สูงสุด ( ulimit -u) สัญญาณที่รอดำเนินการ ( ulimit -i) สิ่งที่ฉันต้องการคือเปอร์เซ็นต์ของการใช้งาน (0-100)
29 linux  bash  ulimit 

3
ลำดับการเปลี่ยนเส้นทาง
ฉันไม่ค่อยเข้าใจว่าคอมพิวเตอร์อ่านคำสั่งนี้อย่างไร cat file1 file2 1> file.txt 2>&1 หากฉันเข้าใจ2>&1เพียงแค่เปลี่ยนเส้นทางข้อผิดพลาดมาตรฐานไปที่เอาต์พุตมาตรฐาน โดยตรรกะนั้นคำสั่งอ่านให้ฉันดังต่อไปนี้: ต่อไฟล์file1และfile2. ส่งจากการดำเนินการนี้stdoutfile.txt ส่งไปยังstderrstdout จบ? ฉันไม่แน่ใจว่าคอมพิวเตอร์กำลังทำอะไรอยู่ โดยตรรกะของฉันคำสั่งควรจะเป็น cat file1 file2 2>&1 > file.txt แต่สิ่งนี้ไม่ถูกต้อง

3
จะมีอะไรใหม่ใน bash 5
ฉันเพิ่งจะผ่านพื้นที่เก็บข้อมูลทุบตีอย่างเป็นทางการ (ฉันมักจะไม่ทำสิ่งนี้) สำหรับสิ่งที่ไม่เกี่ยวข้อง แต่สังเกตเห็นว่าทุบตี 5 อยู่ในรุ่นเบต้าแล้ว ฉันแค่อยากรู้เกี่ยวกับสิ่งที่กำลังจะใหม่ใน bash 5 แต่ไม่พบข้อมูลใด ๆ มีคนสรุปการเปลี่ยนแปลงระหว่างรุ่น Bash 4.4 และ 5 ได้ไหม
29 bash  upgrade 

4
แปลงฐาน BASH จากฐานสิบเป็นฐานสิบหก
ในทุบตีวิธีการหนึ่งจะทำแปลงฐานจากทศนิยมเพื่อฐานอีกหกเหลี่ยมโดยเฉพาะอย่างยิ่ง ดูเหมือนจะเป็นวิธีที่ง่ายกว่า: $ echo $((16#55)) 85 ด้วยการค้นเว็บฉันพบสคริปต์ที่ใช้การคำนวณทางคณิตศาสตร์และตัวละครเพื่อทำการแปลงและฉันสามารถใช้มันเป็นฟังก์ชั่นได้ แต่ฉันคิดว่าทุบตีจะมีการแปลงฐานในตัวแล้ว - ทำมัน?

5
ทำไมฉันต้องวาง "ทำ" ในบรรทัดเดียวกันกับ "สำหรับ"
1. สรุป ผมไม่เข้าใจว่าทำไมฉันต้องกฎ bashate E010 2. รายละเอียด ฉันใช้bashateสำหรับการตัด.shไฟล์ กฎ E010: ทำไม่ได้อยู่ในสายเดียวกับสำหรับ for bashate: แก้ไข: #!/bin/bash for f in bash/*.sh; do sashacommand "$f" done ข้อผิดพลาด: #!/bin/bash for f in bash/*.sh do sashacommand "$f" done เหตุผลใดที่ฉันต้องการforและdoอยู่ในบรรทัดเดียวกัน 3. ไม่มีประโยชน์ ฉันไม่พบคำตอบสำหรับคำถามของฉันใน: Google บทความเกี่ยวกับแนวทางปฏิบัติในการเข้ารหัสที่ดีที่สุด ( ตัวอย่าง ) เอกสาร bashate ฉันพบเพียง : ชุดของกฎที่ช่วยให้สิ่งต่าง ๆ สอดคล้องกันในบล็อกควบคุม สิ่งเหล่านี้จะถูกมองข้ามบนเส้นยาวที่มีความต่อเนื่องเพราะการคลายตัวซึ่งเป็น“ …

1
bash line จะดำเนินการต่อหลังจาก && และ || เอกสาร?
ฉันได้เห็นโครงสร้างนี้ในสคริปต์จำนวนมากและใช้มันเอง แต่มันทำให้ฉันรำคาญใจที่ฉันไม่สามารถหามันได้ในเอกสารประกอบ ตัวอย่าง: [ -f file1 ] && [ -f file2 ] && echo "Both files exist." || echo "One or the other file doesn't exist." สิ่งนี้สามารถทำได้ด้วยแบ็กสแลชก่อนขึ้นบรรทัดใหม่ดังที่ได้กล่าวไว้ในman bash: If a \<newline> pair appears, and the backslash is not itself quoted, the \<newline> is treated as a line continuation (that is, …

4
ขอบเขตของตัวแปรท้องถิ่นในฟังก์ชั่นเชลล์
หลังจากอ่าน24.2 ตัวแปรท้องถิ่นผมคิดว่าการประกาศตัวแปรvarด้วยคำหลักlocalนั่นหมายความว่าvarค่า 's สามารถเข้าถึงได้เฉพาะภายในบล็อกของรหัสที่คั่นด้วยวงเล็บปีกกาของฟังก์ชั่น อย่างไรก็ตามหลังจากรันตัวอย่างต่อไปนี้ฉันพบว่าvarสามารถเข้าถึงได้อ่านและเขียนจากฟังก์ชั่นที่เรียกใช้โดยบล็อกของรหัสนั้น - เช่นแม้ว่าจะvarถูกประกาศlocalไปouterFuncแล้วinnerFuncก็ยังสามารถอ่านและแก้ไขค่าได้ Run It Online #!/usr/bin/env bash function innerFunc() { var='new value' echo "innerFunc: [var:${var}]" } function outerFunc() { local var='initial value' echo "outerFunc: before innerFunc: [var:${var}]" innerFunc echo "outerFunc: after innerFunc: [var:${var}]" } echo "global: before outerFunc: [var:${var}]" outerFunc echo "global: after outerFunc: [var:${var}]" …

3
'exec {fd} </ dev / watchdog' ทำอะไรใน Bash
นั่นคือตัวอักษร{fd}ไม่ใช่ตัวยึดตำแหน่ง ฉันมีสคริปต์ที่ทำสิ่งนี้และไม่ได้แหล่งข้อมูลใด ๆ และไม่มีการอ้างอิง {fd} ที่อื่น ทุบตีนี้ถูกต้องหรือไม่ exec {fd}&lt;/dev/watchdog

2
ฉันจะบังคับให้ผู้ใช้เปลี่ยนรหัสผ่านในการเข้าสู่ระบบครั้งแรกโดยใช้ ssh ได้อย่างไร
ฉันพยายามบังคับให้ผู้ใช้ที่เพิ่งสร้างใหม่เปลี่ยนรหัสผ่านในการเข้าสู่ระบบครั้งแรกโดยใช้ ssh เพื่อเหตุผลด้านความปลอดภัยฉันต้องการให้รหัสผ่านที่ปลอดภัยแก่เขาจนกว่าเขาจะลงชื่อเข้าใช้เป็นครั้งแรก ฉันทำสิ่งต่อไปนี้: useradd -s /bin/bash -m -d /home/foo foo passwd foo การทำchage -d 0 fooเพียงให้ฉันข้อผิดพลาดYour account has expired; please contact your system administratorในการเข้าสู่ระบบ ssh
28 linux  bash  ssh  login  pam 

2
เส้นประ `- 'ก่อนหน้า' ทุบตี 'บนข้อผิดพลาด' ไม่พบคำสั่ง 'หมายความว่าอย่างไร
เมื่อคุณป้อนคำสั่งที่ไม่ถูกต้องที่ bash prompt คุณจะได้รับข้อความ -bash: {command}: command not found อะไร-ที่มีความหมายว่าจุดเริ่มต้นมาก?
28 bash 

4
สคริปต์ทุบตีตรวจพบได้อย่างไรว่าสคริปต์นั้นทำงานในพื้นหลัง
มีวิธีที่สคริปต์ทุบตีจะรู้ว่ามันทำงานในเบื้องหน้าหรือพื้นหลังและเพื่อให้สามารถทำงานแตกต่างกันเล็กน้อยในแต่ละกรณี?
28 bash  shell 

9
การลบไดเรกทอรีจาก PATH
ฉันพยายามรวบรวม wxWidgets โดยใช้ MingW และฉันมี cygwin ในเส้นทางของฉันซึ่งดูเหมือนว่าจะขัดแย้งกัน ดังนั้นฉันต้องการลบออก/d/Programme/cygwin/binจากตัวแปร PATH และฉันสงสัยว่ามีวิธีที่สง่างามในการทำเช่นนี้หรือไม่ วิธีการที่ไร้เดียงสาจะสะท้อนไปยังไฟล์ลบออกด้วยตัวเองและส่งมัน แต่ฉันคิดว่ามันมีวิธีการที่ดีกว่า

4
จะทำ 'wc -l' อย่างต่อเนื่องกับ gnu texttools ได้อย่างไร?
ฉันรู้แน่นอนว่า cat logfile.txt | wc -l 120 จะบอกจำนวนบรรทัดในไฟล์ให้ฉัน แต่ทว่า tail -f logfile.txt จะแสดงบรรทัดใหม่ที่โปรแกรมอื่นเขียนถึงlogfile.txtฉัน เป็นไปได้หรือไม่ที่จะรวมทั้งสองอย่างเพื่อให้ฉันได้รับการนับจำนวนบรรทัดใหม่อย่างต่อเนื่องของ logfile.txt ด้วยยูทิลิตี้ข้อความมาตรฐาน? ฉันรู้เกี่ยวกับ watch wc -l logfile.txt แต่ฉันไม่ต้องการนับไฟล์ใหม่ทุกครั้งที่ดูเหมือนว่าจะเป็นการสิ้นเปลือง หนึ่งจะต้องมีการผนวกเพียงนับทุกวินาทีหรือมากกว่านั้นและอาจจะ\rแทนที่จะเป็น\nในตอนท้ายของบรรทัด

1
เหตุใดไฟล์ echo> ใช้เวลาจริงมากกว่า echo | sed> file?
ตัวอย่างด้านล่างทำให้ฉันประหลาดใจ ดูเหมือนว่าจะตอบโต้ได้ง่าย ... นอกเหนือจากความจริงที่ว่ามีเวลาผู้ใช้มากขึ้นสำหรับecho | sedคอมโบ เหตุใดจึงechoใช้เวลามากเมื่อทำงานเพียงอย่างเดียวหรือคำถามควรsedเปลี่ยนสถานะการเล่นอย่างไร ดูเหมือนว่าechoจะต้องทำเสียงสะท้อนที่เหมือนกันในทั้งสองกรณี ... time echo -n a\ {1..1000000}\ c$'\n' &gt;file # real 0m9.481s # user 0m5.304s # sys 0m4.172s time echo -n a\ {1..1000000}\ c$'\n' |sed s/^\ // &gt;file # real 0m5.955s # user 0m5.488s # sys 0m1.580s
28 bash  shell  pipe  time  echo 

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