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

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

5
ฉันจะใช้ทุบตีเป็นเปลือกเข้าสู่ระบบของฉันได้อย่างไรเมื่อระบบของฉันปฏิเสธที่จะให้ฉันเปลี่ยนมัน
ดูแลระบบยูนิกซ์ที่ผมทำงานก็เต็มใจที่จะให้ฉันเข้าถึงเปลี่ยนเปลือกเข้าสู่ระบบของฉันจากไปksh bashเขาให้ข้อแก้ตัวต่าง ๆ สิ่งที่สนุกที่สุดที่พวกเขาเขียนสคริปต์ทั้งหมดเพราะkshพวกเขาจะไม่ทำงานถ้าฉันพยายามเรียกใช้พวกเขา ฉันไม่รู้ว่าเขาได้รับแนวคิดเหล่านี้จากที่ใด แต่เนื่องจากฉันไม่สามารถโน้มน้าวเขาได้มีทางเลือกอื่นอีกไหมที่ฉันมี ( chshติดตั้งบนเครื่องเหล่านี้ แต่เราใช้คีย์สาธารณะ / ส่วนตัวสำหรับการเข้าสู่ระบบและฉันไม่มีรหัสผ่านดังนั้นเมื่อchshแจ้งรหัสผ่านให้ฉันฉันไม่มีอะไรจะให้)
38 shell  login  profile 

6
วิธีหลอกให้คำสั่งคิดว่าเอาต์พุตกำลังไปที่เทอร์มินัล
เมื่อได้รับคำสั่งที่เปลี่ยนพฤติกรรมเมื่อเอาต์พุตกำลังส่งไปยังเทอร์มินัล (เช่นสร้างเอาต์พุตสี) เอาต์พุตนั้นสามารถเปลี่ยนเส้นทางในไพพ์ไลน์ได้อย่างไรในขณะที่รักษาพฤติกรรมที่เปลี่ยนไป จะต้องมียูทิลิตี้สำหรับสิ่งที่ฉันไม่ทราบ คำสั่งบางคำสั่งเช่นgrep --color=alwaysมีแฟล็กตัวเลือกเพื่อบังคับให้ทำงาน แต่คำถามคือวิธีการแก้ไขโปรแกรมที่ต้องอาศัยการทดสอบ descriptor ไฟล์เอาต์พุตเพียงอย่างเดียว ถ้ามันเป็นเรื่องสำคัญเปลือกของฉันอยู่bashบน Linux
38 shell  pipe  utilities  stdout  pty 

7
ข้อผิดพลาดการทำให้แท็บเสร็จสมบูรณ์: ทุบตี: ไม่สามารถสร้างไฟล์ชั่วคราวสำหรับเอกสารที่นี่: ไม่มีพื้นที่เหลือบนอุปกรณ์
เมื่อใช้แถบแท็บฉันได้รับข้อผิดพลาดนี้: bash: ไม่สามารถสร้างไฟล์ temp สำหรับ here-document: ไม่มีพื้นที่เหลือบนอุปกรณ์ " ความคิดใด ๆ ฉันทำการค้นคว้ามาแล้วหลายคนพูดถึงไฟล์ / tmp ซึ่งอาจมีบางอย่างล้นเหลือ เมื่อฉันรันdf -hฉันจะได้รับ: Filesystem Size Used Avail Use% Mounted on /dev/sda2 9.1G 8.7G 0 100% / udev 10M 0 10M 0% /dev tmpfs 618M 8.8M 609M 2% /run tmpfs 1.6G 0 1.6G 0% /dev/shm tmpfs 5.0M 4.0K …
38 debian  shell  ssh  tmp 

3
สามารถสร้างไฟล์โดยกำหนดสิทธิ์ในบรรทัดคำสั่งได้หรือไม่
เมื่อสร้างไดเรกทอรีmkdir -m <mode> <dir>ให้สำหรับการสร้างหนึ่งหรือหลายไดเรกทอรีด้วยชุดโหมด / การอนุญาตที่กำหนด (ตามปกติ) มีการสร้างไฟล์ที่เทียบเท่าในบรรทัดคำสั่งหรือไม่ คล้ายกับ: open("file", O_WRONLY | O_APPEND | O_CREAT, 0777); ใช้touchตามด้วยchmodตัวเลือกเดียวของฉันที่นี่? แก้ไข:หลังจากลองใช้คำแนะนำของ teppic เพื่อใช้installฉันก็วิ่งผ่านstraceเพื่อดูว่ามันใกล้กับอะตอมมากแค่ไหน คำตอบคือไม่มาก: $ strace install -m 777 /dev/null newfile ... open("newfile", O_WRONLY|O_CREAT|O_EXCL, 0666) = 4 fstat(4, {st_mode=S_IFREG|0666, st_size=0, ...}) = 0 ... fchmod(4, 0600) = 0 close(4) = 0 ... chmod("newfile", …

7
`~ / Documents` เป็นญาติหรือเส้นทางที่แน่นอน?
นี่เป็นเพียงคำถามเกี่ยวกับคำศัพท์เท่านั้น มันมาจากการสอบปฏิบัติจากหนังสือเตรียมการของLPIC คำตอบที่ถูกต้องตามหนังสือคือนั่น~/Documentsคือไดเรกทอรีที่สัมพันธ์กันเพราะมันสัมพันธ์กับไดเรกทอรีบ้าน อย่างไรก็ตามหนังสือเล่มนี้มีอัตราส่วนของความผิดพลาดและความผิดพลาดที่น่านับถือดังนั้นฉันจึงไม่สามารถรับทุกสิ่งที่เขียนไว้ที่นั่นได้ ที่นี่ฉันไม่เห็นด้วยเพราะสำหรับฉัน~ทำหน้าที่เป็นตัวแปรที่ขยายโดยเชลล์ในเนื้อหาของ$HOMEตัวแปรหรือเส้นทางไดเรกทอรีบ้านของผู้ใช้ปัจจุบัน (cf. man bash) ดังนั้นเส้นทาง/home/myuser/Documentsที่แท้จริงจึงเป็นไดเรกทอรีแน่นอน แม้แต่Wikipediaครั้งเดียวก็ดูเหมือนว่าฉันไม่ได้ช่วยในหัวข้อนี้ (แม้ว่ามันจะยืนยันว่าหนังสือเล่มนี้ผิดกับเรื่องนี้): พา ธ สัมบูรณ์หรือพา ธ เต็มไปยังตำแหน่งเดียวกันในระบบไฟล์โดยไม่คำนึงถึงไดเร็กทอรีการทำงานปัจจุบัน หากต้องการทำเช่นนั้นจะต้องมีไดเรกทอรีราก ในทางตรงกันข้ามเส้นทางสัมพัทธ์จะเริ่มต้นจากไดเรกทอรีทำงานที่ให้มาโดยหลีกเลี่ยงความจำเป็นที่จะต้องระบุเส้นทางที่สมบูรณ์ ที่นี่อีกครั้งฉันไม่เห็นด้วย: ตามคำนิยามนี้เส้นทาง/opt/kde3/bin/../libที่ไม่ขึ้นอยู่กับไดเรกทอรีงานปัจจุบันควรเป็นสิ่งที่แน่นอน แต่ความเข้าใจในปัจจุบันของฉันตรงกับผู้เขียนหนังสือทำให้เส้นทางนี้เป็นญาติ ค้นหาเว็บอย่างรวดเร็วเป็นเพียงการเพิ่มความยุ่งยากของฉันตามพจนานุกรมเว็บสเตอร์ : absolute path - พา ธ ที่สัมพันธ์กับไดเร็กทอรีรูท อักขระตัวแรกต้องเป็นตัวคั่นชื่อพา ธ ดังนั้น$HOME/Documentsหรือเพียงแค่$HOMEจะไม่ถือว่าเป็นไดเรกทอรีที่แน่นอน? คำจำกัดความนี้หมายถึงการขยายตัวของตัวแปรหรือไม่? ~ตัวละครของเชลล์ล่ะ? มีคำจำกัดความที่น่าเชื่อถือของไดเรกทอรีเปรียบเทียบกับสัมบูรณ์ที่ฉันสามารถหาที่ไหนสักแห่งและฉันผิดไปตลอดทาง?
37 shell  filenames 

4
เหตุใดหลายคำสั่งจึงมีตัวเลือก“ เงียบ”?
เหตุใดหลายคำสั่งจึงมีตัวเลือก-qหรือ--quietระงับเอาต์พุตเมื่อคุณสามารถทำสิ่งเดียวกันได้อย่างง่ายดายโดยเปลี่ยนเส้นทางเอาต์พุตมาตรฐานไปยังไฟล์ null
37 shell 

2
“ $ {- # * i}”! =“ $ -” หมายถึงอะไร
ใน/etc/profileฉันเห็นสิ่งนี้: for i in /etc/profile.d/*.sh ; do if [ -r "$i" ]; then if [ "${-#*i}" != "$-" ]; then . "$i" else . "$i" >/dev/null 2>&1 fi fi done อะไร${-#*i}หมายถึง ${-ฉันไม่สามารถหาคำนิยามของการขยายตัวพารามิเตอร์เริ่มต้น

3
chmod + โหมดเงียบ + วิธีบังคับให้ออกรหัส 0 แม้มีข้อผิดพลาด
มันเป็นไปได้รัน chmod และละเว้นข้อผิดพลาดจากคำสั่ง ตัวอย่าง (หมายเหตุ file.txt ไม่แสดงเพื่อแสดงตัวอย่าง) เมื่อฉันพิมพ์ chmod 777 file.txt ฉันได้รับข้อผิดพลาดในผลลัพธ์ chmod: cannot access file.txt : no such file or directory ดังนั้นฉันจึงเพิ่มแฟล็ก -f ลงในคำสั่งดังต่อไปนี้: (file.txt ไม่มีอยู่เพื่อแสดงเคส) chmod -f 777 file.txt echo $? 1 แต่จากตัวอย่าง chmod ส่งคืน 1 โปรดแนะนำวิธีการบังคับให้คำสั่ง chmod ให้รหัสทางออก 0 ทั้งๆที่มีข้อผิดพลาด

2
Bash มีคุณสมบัติที่คล้ายกันเช่นการบันทึกอัตโนมัติและการเน้นของปลาหรือไม่?
ฉันเพิ่งสังเกตเห็น 2 คุณสมบัติในปลาและสงสัยว่าใครรู้ว่าสิ่งเหล่านี้ยังมีอยู่ใน Bash? การเน้นไวยากรณ์ ข้อมูลจำเพาะ: คุณจะสังเกตเห็นได้อย่างรวดเร็วว่าปลาทำการเน้นไวยากรณ์ขณะที่คุณพิมพ์ คำสั่งที่ไม่ถูกต้องจะมีสีแดงตามค่าเริ่มต้น: คำสั่งอาจไม่ถูกต้องเนื่องจากไม่มีอยู่หรืออ้างถึงไฟล์ที่คุณไม่สามารถดำเนินการได้ เมื่อคำสั่งใช้ได้ถูกต้องคำสั่งนั้นจะปรากฏเป็นสีอื่น fish จะขีดเส้นใต้พา ธ ไฟล์ที่ถูกต้องขณะที่คุณพิมพ์ สิ่งนี้บอกคุณว่ามีไฟล์ที่ขึ้นต้นด้วย 'somefi' ซึ่งเป็นข้อเสนอแนะที่มีประโยชน์เมื่อคุณพิมพ์ แนะนำอัตโนมัติ ข้อมูลจำเพาะ: fish แนะนำคำสั่งในขณะที่คุณพิมพ์และแสดงคำแนะนำทางด้านขวาของเคอร์เซอร์เป็นสีเทา มันรู้เส้นทางและตัวเลือก หากต้องการยอมรับคำแนะนำอัตโนมัติให้กดลูกศรขวาหรือ Control-F หากการบันทึกอัตโนมัติไม่ใช่สิ่งที่คุณต้องการเพียงแค่เพิกเฉย
37 bash  shell  fish 

2
`env <command>` กำลังทำอะไรอยู่
คำสั่งenv ls -alกำลังทำอะไร ฉันมีการทดสอบลินุกซ์และมีคำถาม: "วิธีเรียกใช้คำสั่งโดยตรง แต่ไม่ใช่นามแฝง?" ฉันรู้ว่ามีวิธีแก้ปัญหาเช่นคำสั่ง prefixing พร้อมสัญลักษณ์พิเศษบางอย่าง แต่ฉันลืมไป \ตอนนี้ผมรู้ว่ามันเป็น (อ่านจากโพสต์นี้ ) แต่ฉันยังจำได้ว่ามีบางแห่งที่ฉันอ่านเพื่อกำจัดนามแฝงเราสามารถใช้คำสั่งenvล่วงหน้าได้ ฉันทำมันและดูเหมือนว่าใช้งานได้ แต่คำตอบของฉันมีคุณสมบัติผิด ผมอ่านinfoและmanบนenvแต่ไม่ได้เข้าใจมากเกินไป กำลังenvทำอะไรอยู่และenv &lt;command&gt;โดยไม่มีข้อโต้แย้งสำหรับenvตัวเอง?

3
gnome-terminal: ติดตามไดเรกทอรีในแท็บใหม่
ฉัน Arch $HOMEลินุกซ์และเมื่อฉันเปิดอาคารผู้โดยสารแห่งใหม่แท็บก็มักจะไป ฉันจะสร้างมันได้อย่างไรเมื่อฉันเปิดแท็บใหม่มันจะเปิดเชลล์ในไดเรกทอรีที่ฉันอยู่ก่อนหน้านี้


5
ทำไมฉันต้องตั้งค่า env vars ใน tmux อีกครั้งเมื่อฉันแนบใหม่?
ฉันทำงานบน mac และ ssh / tmux เป็นหลักแนบกับเครื่อง Linux เพื่อทำงานของฉัน ฉันมี ssh-agent กำลังทำงานบนเครื่อง Linux ฉันมี set -g update-environment "SSH_AUTH_SOCK SSH_ASKPASS WINDOWID SSH_CONNECTION XAUTHORITY" .tmux.confในของฉัน แต่เมื่อใดก็ตามที่ฉันแนบมากับเซสชั่นนี้ฉันต้องทำงาน tmux setenv SSH_AUTH_SOCK $SSH_AUTH_SOCK เพื่อให้หน้าต่าง tmux ใหม่$SSH_AUTH_SOCKตั้งค่าไว้ถูกต้อง ฉันไม่ต้องการทำเช่นนี้ ความคิดใด ๆ ปรับปรุง ฉันคิดว่าฉันอธิบายไม่ได้ดี นี่คือฟังก์ชั่นเชลล์ของฉันเพื่อเปิดเชลล์บนเครื่องระยะไกล: sshh () { tmux -u neww -n ${host} "ssh -Xt ${host} $*" } …

4
ฉันจะลบเลขศูนย์นำออกจากผลลัพธ์ของ 'วันที่' หรือหลีกเลี่ยงการตีความเลขฐานแปดของเลขทศนิยมดังกล่าวได้อย่างไร
ฉันมีสิ่งนี้: date +"%H hours and %M minutes" ฉันใช้เทศกาลเพื่อบอกว่ามัน .. แต่มันบอกว่า: "ศูนย์เก้าชั่วโมง" .. ฉันอยากให้มันพูดว่า "เก้าชั่วโมง"! แต่วันที่ให้ฉัน 09 เสมอ ... ดังนั้นฉันสงสัยว่า bash สามารถทำให้กลายเป็นเพียงแค่ 9 ได้หรือไม่? ในสคริปต์ที่ซับซ้อนฉันพยายาม printf %d 09 แต่มันล้มเหลว .. ไม่ใช่เลขฐานแปด :( ความคิดใด ๆ
37 bash  shell  date  arithmetic 

1
หลีกเลี่ยง“ BASH-isms” ในเชลล์สคริปต์
มีเครื่องมือที่คล้ายกับPerl :: Critic หรือไม่ที่จะตรวจสอบเชลล์สคริปต์ของคุณและชี้ให้เห็นข้อบกพร่องปัญหาเกี่ยวกับการพกพาการใช้งานโปรแกรมที่ไม่ได้มาตรฐานโดยไม่มีข้อผิดพลาด ฉันรู้ว่าset -o posixจะปิดใช้งานการใช้งานที่ไม่ใช่ POSIX แต่จะไม่บอกสิ่งที่ฉันต้องการทราบเช่นอาร์เรย์เชลล์ดัชนี zsh เริ่มต้นที่ 1 และทุบตีจาก 0 และเถ้าไม่สนับสนุนอาร์เรย์เลย
37 bash  shell  zsh  ash 

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