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

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

2
ไม่สามารถดำเนินการ / bin / false: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
ฉันพยายามเปิดหน้าจอ GNUด้วยคำสั่งต่อไปนี้ใน Mac OS ของฉัน: host:~ user$ screen หน้าจอเทอร์มินัลจะเปิดขึ้น แต่จะตายอย่างรวดเร็วด้วยข้อความแสดงข้อผิดพลาด: ไม่สามารถดำเนินการ / bin / false: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว เทอร์มินัลของฉันถูกกำหนดค่าให้เปิดbashเชลล์เมื่อเริ่มต้น ฉันได้ลองตั้งค่าเทอร์มินัลเชลล์shให้เป็นข้อผิดพลาดเดียวกัน อย่างไรก็ตามเมื่อฉันรันscreenคำสั่งเป็นคำสั่งsudoก็จะสำเร็จ ฉันจะแก้ไขมันสำหรับผู้ใช้ปกติได้อย่างไร
10 bash  shell  osx 

2
Bash ไม่สามารถทำหน้าที่เป็น none และ nogroup ได้หรือไม่
ฉันมีไฟล์บันทึกที่สร้างขึ้นโดยnobody: nogroupซึ่งเป็นกิจกรรมที่ถูกบันทึกไว้ฉันต้องการเลียนแบบการเพิ่มข้อความลงในไฟล์บันทึกนั้น ความคิดแรกของฉันคือ: $ sudo su nobody This account is currently not available.
10 bash  shell  users  privileges 

1
bashrc ขี้เกียจทดแทน
เราจะได้รับ~/.bashrcชื่อแทนเพื่อประเมินการ$()ทดแทนในเวลาทำงานแทนที่จะเป็นช่วงเวลาที่ดำเนินการ ~ / .bashrc (เมื่อเปิดเทอร์มินัล)? ฉันรันคำสั่งนี้บ่อยพอที่ฉันต้องการเพิ่มนามแฝง: svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff อย่างไรก็ตามเมื่อฉันเพิ่มลง~/.bashrcในนามแฝงฉันเห็นว่าการประเมินผลนั้นได้รับการกำหนดค่าตายตัวในค่าที่พวกเขามีในขณะที่ฉันเปิดเทอร์มินัล: $ alias alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff' ถ้าฉันเปิดเทอร์มินัล~ฉันจะได้รับข้อผิดพลาด: svn: E155007: '/home/dotancohen' is not a working copy svn: …
10 bash  shell  quoting  alias  bashrc 

2
ล้างตัวแปรทั้งหมดโดยไม่ปิดเทอร์มินัล
ฉันต้องการทราบวิธีล้างตัวแปรทั้งหมดที่ฉันกำหนดไว้ใน command prompt โดยไม่ปิดเทอร์มินัล ตัวอย่างเช่นถ้าฉันตั้งค่าตัวแปรใน command prompt เป็น: $ a=1 ตอนนี้ฉันต้องการลบตัวแปร$a(และตัวแปรอื่น ๆ อีกมากมายที่กำหนดในลักษณะที่คล้ายกัน) โดยไม่ต้องปิดสถานี ฉันสามารถใช้unsetแต่มันจะวุ่นวายถ้าไม่มีขนาดใหญ่ ของตัวแปร

3
ฝากรายการของไฟล์ที่ไม่มีอยู่ทั้งหมด
ฉันใช้คำสั่งจากสคริปต์เช่น tar -c -f ar.tar a b c d โดยที่ b, c และ d อาจไม่มีอยู่และอาจเป็นไดเร็กทอรี โซลูชั่นที่ฉันได้มาด้วยกำลังท่อส่งออกของls -dไปgrepแล้วประกบมันลงไปในtarคำสั่งหรือการเปิด globs @(a|b|c|d)ที่เพิ่มขึ้นสำหรับ มีวิธีที่เหนือกว่าในการทำเช่นนี้? ฉันใช้ Debian Wheezy ซึ่งดูเหมือนจะไม่มี--includeพารามิเตอร์
10 shell  wildcards  tar 

3
วิธีจัดการ backspace ขณะอ่านหนังสือ
ฉันจะจัดการ backspaces ที่ป้อนมาได้อย่างไรมันจะแสดง^?ว่าพยายามแล้วและreadนับตัวอักขระอย่างไรเนื่องจาก12^?3ตัวอักษร 5 ตัวนั้นเสร็จสมบูรณ์แล้ว (แม้ว่าพวกเขาทั้งหมดจะไม่ใช่อินพุตจริง) แต่หลังจากที่12^?3^?มันกลับมาพร้อมท์แปลก ๆ กรุณาช่วย! -bash-3.2$ read -n 5 12^?3^?-bash-3.2$
10 bash  shell  line-editor  read 

3
การใช้ $ & in bash คืออะไร
ฉันกำลังมองหาพารามิเตอร์พิเศษในทุบตี ฉันอยากรู้ว่าอะไรคืออะไร$&และแตกต่าง$_อย่างไร ฉันเห็นผลลัพธ์ต่อไปนี้เมื่อรันคำสั่ง แต่ไม่สามารถค้นหาความหมายได้เช่นกัน k@Linux:~$ echo $& [1] 12397 $ k@Linux:~$ echo $n [1]+ Done echo $ k@Linux:~$
10 bash  shell 

1
ทำความเข้าใจกับค่าเริ่มต้นของ IFS
ใน GNU bash รุ่น 4.2.8 ของฉัน IFS มีค่าเริ่มต้นของพื้นที่แท็บและตัวป้อนบรรทัดตามค่าเริ่มต้น: usr@T42 ~ $ echo -n "$IFS" | hexdump -C 00000000 20 09 0a | ..| 00000003 usr@T42 ~ $ มีเหตุผลสำหรับ IFS เริ่มต้นดังกล่าวหรือไม่ นอกจากนี้ที่สาธารณูปโภคใช้ไอเอฟเอนอกเหนือจากการทุบตีในตัวread?
10 bash  shell  quoting 

3
แทนที่สตริงด้วยดัชนีตามลำดับ
ใครสามารถแนะนำวิธีที่สง่างามเพื่อให้บรรลุนี้ การป้อนข้อมูล: test instant () test instant () ... test instant () //total 1000 lines ผลลัพธ์ควรเป็น: test instant1 () test instant2 () test instant1000() บรรทัดว่างอยู่ในไฟล์อินพุตของฉันและมีไฟล์จำนวนมากภายใต้ไดเรกทอรีเดียวกันที่ฉันต้องดำเนินการในครั้งเดียว ฉันพยายามทำสิ่งนี้เพื่อแทนที่ไฟล์จำนวนมากใน dir เดียวกันและไม่ทำงาน for file in ./*; do perl -i -000pe 's/instance$& . ++$n/ge' "$file"; done ข้อผิดพลาด: Substitution replacement not terminated at -e line 1. …

3
รับล็อกการอ่าน / เขียนแบบเอกสิทธิ์เฉพาะบุคคลในไฟล์สำหรับการปรับปรุงอะตอม
ฉันต้องการมีไฟล์ที่ใช้เป็นตัวนับ ผู้ใช้ A จะเขียนและเพิ่มจำนวนนี้ในขณะที่ผู้ใช้ B ขอให้อ่านไฟล์ เป็นไปได้หรือไม่ที่ผู้ใช้ A สามารถล็อคไฟล์นี้เพื่อให้ไม่มีใครสามารถอ่านหรือเขียนไฟล์ได้จนกว่าการเขียนของผู้ใช้จะเสร็จสิ้น? ฉันดูแล้วflockแต่ดูเหมือนจะไม่สามารถใช้งานได้ตามที่คาดหวัง flock -x -w 5 /dev/shm/counter.txt echo "4" > /dev/shm/counter.txt && sleep 5 หากมีวิธีที่เหมาะสมกว่าในการรับไฟล์ที่เพิ่มขึ้นคล้ายกับอะตอมนี้ซึ่งจะเป็นการฟังที่ดีเช่นกัน! เป้าหมายของฉันคือ: LOCK counter.txt; write to counter.txt; ในขณะที่ในเวลาเดียวกัน Read counter.txt; realize it's locked so wait until that lock is finished.

1
ทำไมเทอร์มินัลไม่แสดงสกีมาสีเมื่อบันทึกเป็นรูทแล้ว
ขณะนี้ฉันใช้ Debian 7 Wheezy และฉันสังเกตเห็นว่าจานสีบนเทอร์มินัล (ซึ่งอาจเป็นประโยชน์ในการระบุในกลุ่มของไฟล์และโฟลเดอร์ขนาดใหญ่) ไม่ได้เปิดใช้งานเมื่อฉันเข้าสู่ระบบในฐานะรูท ฉันได้สังเกตเห็นว่าความสำเร็จของแท็บไม่เหมือนกันในสถานการณ์นี้ ฉันจะกำหนดค่าปัญหาเหล่านี้ได้อย่างไร
10 bash  shell  root  colors 

4
ค้นหาไดเรกทอรีที่ไม่มีไดเรกทอรีย่อย
ฉันกำลังเขียนสคริปต์คือ ksh จำเป็นต้องค้นหาชื่อไดเรกทอรีทั้งหมดภายใต้ไดเรกทอรีปัจจุบันซึ่งมีเฉพาะไฟล์เท่านั้นไม่ใช่ไดเรกทอรีย่อย ฉันรู้ว่าฉันสามารถใช้ls -alRและแยกวิเคราะห์เอาต์พุตแบบซ้ำ ๆ สำหรับตัวอักษรตัวแรกในฟิลด์แรก ( dสำหรับไดเรกทอรี) ฉันคิดว่าawkเป็นวิธีที่ดีที่สุดในการแยกวิเคราะห์และค้นหา ตัวอย่างเช่นls -alเอาต์พุตแบบง่ายในไดเร็กทอรีปัจจุบัน: drwxr-xr-x 22 af staff 748 18 Mar 22:21 . drwxr-xr-x 5 root admin 170 17 Mar 18:03 .. -rw------- 1 af staff 3 17 Mar 16:37 .CFUserTextEncoding drwxr-xr-x 5 af staff 170 17 Mar 17:12 Public drwxr-xr-x 9 …
10 shell  find  directory  ls  ksh 

4
ฉันจะกำหนดรหัสผ่านเริ่มต้น / เริ่มต้นให้กับผู้ใช้ใน Linux ได้อย่างไร
ผมพบว่าคู่มือที่อธิบายถึงวิธีไปตั้งค่ารหัสผ่านของผู้ใช้ ฉันกำลังพยายามทำให้เป็นอัตโนมัติและส่งอีเมลไปยังผู้ใช้ที่ชอบ: userid created with password XYZ. request to change the initial password. ตามเอกสารข้างต้นจำเป็นต้องสร้างรหัสผ่านที่เข้ารหัสโดยใช้ Python และป้อนให้กับusermodคำสั่งเช่นนี้: usermod -p "<encrypted-password>" <username> มีวิธีอื่นที่ง่ายกว่าในการทำเช่นนี้? ฉันไม่ต้องการดาวน์โหลดโปรแกรมอรรถประโยชน์พิเศษใด ๆ ควรสรุปให้มากที่สุด แก้ไข : แม้แต่วิธีการที่ระบุในลิงก์ด้านบนก็ไม่ได้ผลสำหรับฉัน: bash-3.00# python Python 2.4.6 (#1, Dec 13 2009, 23:43:51) [C] on sunos5 Type "help", "copyright", "credits" or "license" for more information. >>> import …

4
คำนวณตัวแปรและส่งออกไปยังตัวแปรอื่น
bcเครื่องคิดเลขเดียวที่ผมรู้ก็คือ ฉันต้องการเพิ่ม1ตัวแปรและส่งออกไปยังตัวแปรอื่น ฉันได้รับnextnumตัวแปรจากการนับสตริงในไฟล์: nextnum=`grep -o stringtocount file.tpl.php | wc -w` ช่วยบอกว่าค่าnextnum 1เมื่อเพิ่มเข้ามาด้วยก็จะกลายเป็น1 2ในการคำนวณฉันทำงาน: rownum=`$nextnum+1 | bc` แต่มีข้อผิดพลาด: 1+1: command not found ฉันเพิ่งล้มเหลวในส่วนการคำนวณ ฉันลองเปลี่ยน backtick แล้วแต่ยังใช้งานไม่ได้ ฉันไม่ทราบวิธีการคำนวณตัวแปรและส่งออกไปยังตัวแปรอื่น

1
การตัดคำสั่งที่มีเครื่องหมายคำพูดเดี่ยวและคู่สำหรับคำสั่งอื่น
ฉันเพิ่งเรียนรู้เกี่ยวกับนาฬิกาแต่ฉันมีปัญหาในการทำให้มันทำงานกับคำสั่งที่ค่อนข้างซับซ้อน ตัวอย่างเช่นฉันต้องการขอwatchให้เรียกใช้คำสั่งต่อไปนี้zshทุกสามวินาที* : for x in `command_1 | grep keyword | cut -d' ' -f1`; do command_2 "word[word=number]" $x; done ดังที่คุณเห็นบรรทัดด้านบนมีเครื่องหมายคำพูดเดี่ยวเครื่องหมายคำพูดคู่และอักขระพิเศษอื่น ๆ ดังนั้นฉันจึงพยายาม: watch -n 3 "for x in `my_command | grep keyword | cut -d' ' -f1`; do command2 "rusage[mem=7000]" $x; done" แต่แล้วฉันได้: ไม่พบข้อมูลที่ตรงกับ x in! @ # $ …
10 shell  zsh  quoting 

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