เหตุใดปุ่มลูกศรของฉันจึงไม่ทำงาน


16

ฉันเพิ่งติดตั้ง Ubuntu และเมื่อฉันเรียกใช้ sh บนเทอร์มินัลแป้นลูกศรของฉันไม่ทำงานดังนั้นฉันจึงไม่สามารถผ่านประวัติการโทรหรือแก้ไขสิ่งที่ฉันกำลังพิมพ์ มันก็ออกมาเป็นตัวอักษรแปลก ๆ ^[[Aเช่น

เชลล์ล็อกอินเป็นทุบตีและทำงานได้ดี แต่ทันทีที่ฉันเปลี่ยนเป็น SH พวกเขาจะไม่ทำงาน

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร


2
ทำไมคุณถึงเปลี่ยนมาใช้ SH
oenone

2
@oenone ทำไม TT สำคัญว่าทำไม OP สวิทช์เพื่อsh? แน่นอนว่าสาเหตุที่ทำให้เขาไม่เกี่ยวข้องกับความจริงที่ว่ามันเป็นปัญหา
Agi Hammerthief

คำตอบ:


15

/bin/sh(รีบ) เปลือกเป็นไปตามมาตรฐาน POSIX ลดลงเปลือกการทำงานให้มีประสิทธิภาพมากขึ้น (ขนาดเล็ก) สำหรับการบูตระบบ เนื่องจากเป็นส่วนหนึ่งของประวัติและการแก้ไขบรรทัดคำสั่งขั้นสูงจะไม่รวมอยู่ มันเหมาะสมกว่าสำหรับการเขียนสคริปต์ POSIX ที่เข้มงวดกว่าเป็นเชลล์แบบโต้ตอบ แนวคิดคือเปลือก 'เข้าสู่ระบบ' จะถูกทุบตีโดยค่าเริ่มต้น แต่ระบบการบูตจะใช้เส้นประ หน้า man ใน Ubuntu 11.04 แสดงว่า dash มีประวัติและการแก้ไขบรรทัดคำสั่ง แต่โปรแกรมไม่มีคุณสมบัติเหล่านี้ ดูขนาดของฐานปฏิบัติการ

$ ls -l /bin/*ash /bin/sh
-rwxr-xr-x 1 root root 822420 Mar 31 15:26 /bin/bash
-rwxr-xr-x 1 root root  83848 Nov 15  2010 /bin/dash
lrwxrwxrwx 1 root root      4 May 17 21:15 /bin/rbash -> bash
lrwxrwxrwx 1 root root      4 May 17 21:15 /bin/sh -> dash
$ strings /bin/bash | egrep -ci 'fc|hist'
181
$ strings /bin/dash | egrep -ci 'fs|hist'
1

พยายามที่จะใช้ในการทำงาน$SHELLหรือแทนเพียงbashsh


8

ในกรณีที่/bin/shเป็นDashจะต้องมีการกำหนดค่า--with-libeditก่อนการรวบรวม ไม่เช่นนั้นคุณก็ยังสามารถรันset -o viในเชลล์ได้ แต่มันไม่ทำอะไรที่มีประโยชน์


0

shไม่มีประวัติใด ๆ อย่างน้อยฉันไม่ได้:

server$ sh
\h$ history 
sh: history: not found
\h$ fc
sh: fc: not found
\h$ exit
server$ type sh
sh is hashed (/bin/sh)
server$ ll /bin/sh
lrwxrwxrwx 1 root root 4 Jun  1 18:43 /bin/sh -> dash*

1
จริงๆ? ตามข้อกำหนด IEEE มันทำ: pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html
jasonwryan

@jasonwryan คุณจะสังเกตเห็นว่าสิ่งใดที่เกี่ยวข้องกับประวัติหรือโหมดแก้ไขบรรทัดมีการทำเครื่องหมายด้วยUPในข้อมูลจำเพาะนั้นซึ่งหมายความว่าเป็นตัวเลือก (สำหรับ POSIX ไม่สอดคล้อง Unix)
Stéphane Chazelas

@ StéphaneChazelas - อาจเป็นจริง แต่ jasonwryan นั้นถูกต้องแล้ว นี่คือการเชื่อมโยงอื่น และนอกจากนี้ - คุณหมายถึง$FCEDITหรือ$HISTFILEหรือแม้เพียงแค่fc? ผมคิดว่าคนเหล่านั้นอย่างน้อยก็บังคับ - $PS1 \!และการแสดงผลของ ฉันอาจผิดเกี่ยวกับ POSIX spec - แต่พวกเขาทั้งหมดทำงานdashและมีมานานหลายปี
mikeserv

1
@mikeserv ไม่แน่ใจว่าสิ่งที่คุณหมายถึง แต่จะย้ำทั้งหมดfc, $FCEDIT, $HISTFILE, $PS1เป็นตัวเลือกใน POSIX (ที่มีเครื่องหมาย UP สำหรับ "ผู้ใช้พกพา") shระบบที่สอดคล้องกับระบบปฏิบัติการยูนิกซ์จะมีผู้ที่เป็นถึงเป็นสิ่งจำเป็นสำหรับระบบปฏิบัติการยูนิกซ์สอดคล้อง (เหนือสิ่งอื่นยูนิกซ์ยังกำหนดให้echo -eเอาท์พุท-e<LF>) แต่ถ้าระบบ / เชลล์อ้างถึงความสอดคล้อง POSIX เท่านั้นก็ไม่จำเป็นต้องใช้สิ่งเหล่านั้น สำหรับเดเบียนashมันอาจเปิดใช้งานในเวลาคอมไพล์ด้วย --with-libedit ตามที่ได้กล่าวมาแล้ว แต่อย่างน้อยเดเบียนก็ไม่ได้ใช้
Stéphane Chazelas

@ StéphaneChazelas - ขอบคุณมาก dashใช้ฉันเป็นแพคเกจสำหรับ Arch ดังนั้นจึงเป็นเรื่องที่แตกต่างกันอย่างเห็นได้ชัดกว่า Debian เป็นฉันจะเอามัน นั่นคือข้อมูลที่มีค่า manแปลกที่ไม่ได้อยู่ใน
mikeserv
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.