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

คำถามเกี่ยวกับคำสั่งสำหรับการส่งผ่านบรรทัดคำสั่งเดียวไปยังกระบวนการย่อยเชลล์การรันเชลล์แบบโต้ตอบกับอินพุตและเอาต์พุตไปยังบัฟเฟอร์ Emacs และสำหรับการรันเชลล์ในหน้าต่างเทอร์มินัลอีมูเลเตอร์

2
เอาต์พุตเชลล์แปลก ๆ เมื่อใช้ IPython 5
ฉันเพิ่งอัพเกรดเป็น IPython เวอร์ชั่นล่าสุดและตอนนี้มีบางอย่างผิดปกติเมื่อใช้งานใน emacs เมื่อใช้ในขั้วปกติทำงานดี (สีแท็บเสร็จ ฯลฯ ) แต่ทั้งในM-x eshellหรือM-x shellแทนที่จะ outputing In [1]:ก็จริงเอาท์พุท[?12l[?25hและเอาท์พุทจะOut[1][J[?7h[?12l[?25h[?2004l[?7hOut[1]: อาจเป็นคุณสมบัติบางอย่างของเครื่องเทอร์มินัลที่ไม่สามารถใช้ได้กับ emacs ที่ใช้โดย IPython แต่ฉันต้องการทราบว่าเป็นรุ่นใด Terminal.app: In [1]: 2+2 Out[1]: 4 Emacs [?12l[?25h2+2 [J[?7h[?12l[?25h[?2004l[?7hOut[1]: 4
37 shell  eshell  ipython 

1
อะไรคือวิธีการเปิดตัวเชลล์จาก emacs ภายในและคุณสมบัติต่าง ๆ ของมันคืออะไร?
ฉันรู้ถึงความเป็นไปได้อย่างน้อยสี่อย่าง: eshell วาระ ANSI ระยะ เปลือก รายการเครื่องมือทั้งหมดที่มีอยู่ใน emacs เพื่อเปิดตัวเชลล์คืออะไรและมีข้อดีและข้อเสียอะไรบ้าง
25 eshell  shell  term  ansi-term 

3
ฉันจะเรียกใช้กระบวนการ async ในพื้นหลังโดยไม่ต้องเพิ่มบัฟเฟอร์ในบัฟเฟอร์ได้อย่างไร
ฉันได้กำหนดฟังก์ชั่นบางอย่างเพื่อเรียกใช้กระบวนการพื้นหลัง async โดยใช้async-shell-commandใน. emacs ของฉัน แต่ทุกครั้งที่ฉันเรียกใช้คำสั่งจะมีการสร้างหน้าต่างใหม่ (ไม่ใช่เฟรม) และบัฟเฟอร์ของกระบวนการจะปรากฏขึ้นที่นั่น ฉันจะรันคำสั่งโดยไม่มีบัฟเฟอร์ "ป๊อปอัป" ได้อย่างไร
23 shell  async  process 

6
Emacs และบรรทัดคำสั่ง $ PATH ไม่เห็นด้วยบน OSX
มีปัญหาบางอย่างกับPATHการตั้งค่าบน Emacs ที่ส่งผลกระทบต่อสภาพแวดล้อม Haskell ของฉัน: ฉันใช้ ZSH และเมื่อฉันไปที่บรรทัดคำสั่งและการโทรecho $PATHมันจะคืนค่า:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin นี่มาจาก.zprofileการกำหนดค่าที่ฉันมี: # Set the list of directories that Zsh searches for programs. path=( ~/Library/Haskell/bin /usr/local/{bin,sbin} $path ) ดังนั้นจากบรรทัดคำสั่งเมื่อฉันโทรwhich cabalฉันได้รับ:/Users/g/Library/Haskell/bin/cabal เมื่อฉันเริ่ม Emacs และไปที่shellและโทรwhich cabalฉันได้รับ: /usr/bin/cabalซึ่งทำให้ฉันมีปัญหาเนื่องจากเป็นรุ่นที่แตกต่าง เมื่อฉันตรวจสอบecho $PATHจาก Emacs shellฉันเห็น:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/g/Library/Haskell/bin:/usr/local/sbin ฉันไม่รู้ว่าPATHจะแตกต่างอย่างไรในโลก... ใครรู้วิธีทำให้ZSHเชลล์และ Emacs ของฉันเห็นด้วยในสิ่งเดียวกันPATH? ฉันสงสัยว่าเป็นสิ่งที่ควบคุมว่าcabalจะโหลดจากที่ใด UPDATE : การเรียกใช้echo $SHELLจาก Emacs จะพิมพ์ออกมา:/bin/zsh UPDATE 2 …
18 osx  shell  path  haskell-mode 


2
โหมดคนจรจัดช้ากว่าการใช้เทอร์มินัลเป็น ssh มาก
ฉันกำลังใช้รสชาติ Macports ของ Emacs บน OSX Yosemite และได้ตรวจสอบทุก ๆ เธรดที่นี่เกี่ยวกับ Tramp ที่ช้าโดยไม่มีวิธีแก้ปัญหาใด ๆ คนจรจัดใช้งานได้ แต่มีความล่าช้าประมาณ 100 มิลลิวินาทีระหว่างทุกการกระทำ ไม่มีปัญหาที่ส่วนท้ายของเซิร์ฟเวอร์เนื่องจากความล่าช้านี้ไม่มีอยู่ถ้าฉันใช้เทอร์มินัล / iTerm เพียงแค่ ssh ไปยังเซิร์ฟเวอร์เดียวกัน ฉันคิดว่าปัญหาอาจถูก จำกัด อยู่ที่การแก้ไขไฟล์ แต่มันกลับกลายเป็นว่าแพร่หลาย ไม่ว่าฉันจะใช้แค่เปลือกระยะไกลหรือเพียงแค่กดM-x(พร้อมหางเสือ) มันก็ล่าช้าทั้งหมด ฉันได้ลองใช้ ssh, scp และ rsync เป็นวิธีการเชื่อมต่อโดยไม่มีวิธีการแก้ปัญหาใด ๆ ยังได้ลองControlMaster autoโดยไม่มีผลกระทบใด ๆ มีคนอื่นที่มีปัญหานี้และสามารถแก้ไขได้หรือไม่
14 shell  tramp  remote 

2
.bash_profile หรือ. bashrc สำหรับเชลล์ใน emacs หรือไม่
ฉันเขียนนามแฝงสำหรับคำสั่งขนาดใหญ่และเก็บไว้ใน.bash_profileและด้วยความประหลาดใจของฉัน emacs ไม่ได้รับนามแฝงที่ฉันเขียน.bash_profileมา หลังจากค้นหาบางอย่างในอินเทอร์เน็ตฉันสร้าง.bashrcไฟล์ใน $ HOME ด้วยคำสั่ง alias และหลังจากที่ emacs นั้นรับนามแฝง ฉันสับสนเพราะterminal.appต้องใช้นามแฝงจาก.bash_profileแต่ emacs .bashrcใช้เวลานามแฝงเฉพาะใน ฉันกำลังวิ่งM-x shellและฉันใช้ macOS คนที่สามารถอธิบายได้ว่าสิ่งที่เป็นความสัมพันธ์กับ emacs และ&.bashrc.bash_profile ยิ่งกว่านั้นฉันจะให้ Emacs อ่าน.bash_profileเพิ่มเติมได้.bashrcอย่างไร?
11 shell  bash 

1
แนบกับการเรียกใช้เปลือกระยะไกลด้วย eshell / TRAMP / dtach
ฉันมักจะใช้หน้าจอ GNU เพื่อให้เซสชันระยะไกลยังมีชีวิตอยู่ เนื่องจากฉันอาศัยอยู่ใน Emacs ฉันต้องการที่จะสามารถเริ่มต้นเซสชันเชลล์ระยะไกลที่ทำงานอยู่ใหม่จากภายใน Emacs ได้ หน้าจอ GNU ใช้สิ่งแฟนซีทุกประเภทเช่นมัลติเทอร์มินัลและการวาดตัวละครที่ฉันไม่ต้องการ ฉันสนใจแค่การมีเชลล์แบบถอดได้และกลับมาทำงานต่อได้ดังนั้นสิ่งที่เรียบง่ายที่สุดdtachอาจเพียงพอ ฉันใช้ฟังก์ชันนี้เพื่อเปิดเซสชัน SSH และเชื่อมต่อกับdtachเซสชันที่กำลังทำงานอยู่shell-mode(ถ่ายจากที่นี่ ): (defun ssh-dtach (host) "Open SSH connection to remote host and attach to dtach session." (interactive) (let ((explicit-shell-file-name "dtach") (explicit-dtach-args '("-A" "/tmp/emacs.dtach" "-z" "/bin/bash" "--noediting" "-login")) (default-directory (format "/ssh:%s:" host))) (shell (format "*ssh %s*" host)))) …
11 eshell  shell  remote  ssh 

1
เป็นไปได้หรือไม่ที่จะอ่านอินพุตของผู้ใช้จาก STDIN ขณะที่กำลังบล็อกซอร์สบล็อก?
เป็นไปได้ไหมที่จะอ่านอินพุตของผู้ใช้จาก STDIN ในขณะที่กำลังบล็อกซอร์สด้วยorg-babel-tangle? ผมตระหนักถึงเรื่องนี้: Org โหมดบาเบล - code อินเตอร์แอคทีประเมินบล็อก นั่นไม่ได้ช่วยแก้กรณีการใช้งานนี้โดยเฉพาะเนื่องจากมันยังไม่อนุญาตอินพุต STDIN ที่เหมาะสมจากเชลล์ แต่จำลองอินพุตที่ จำกัดภายใน Emacs เท่านั้น พื้นหลัง ฉันต้องการใช้ Babel ของ Org เพื่อเรียนรู้ภาษาการเขียนโปรแกรมใหม่ (Perl และ Bash) โดยใช้บทเรียนจากไฟล์ org หนึ่งไฟล์ ปัญหาคือบทเรียนจำนวนมากพึ่งพา STDIN ตัวอย่างเช่นหากมีการทำงานชิ้นอาหารอันโอชะ Perl ต่อไปนี้: #+BEGIN_SRC perl :tangle hello-name.pl :results output :export code use 5.010; use strict; use warnings; say "What is …

1
ฉันจะป้องกันหนึ่ง subprocess จากการอดอาหารอื่น ๆ ได้อย่างไร
เพื่อความชัดเจนฉันไม่ได้พูดถึงสิ่งที่ควรกำหนดให้ emacs เป็นแบบมัลติเธรด ในการทำซ้ำ: emacs -Q # ฉันทำงาน 24.4.1 ทำเฟรมที่สอง สลับกลับไปที่เฟรมแรก Mx เชลล์ Mx เปลี่ยนชื่อไม่ซ้ำใคร (เราจะสร้างเชลล์ที่สองในภายหลัง) เริ่มวิ่ง: while true; do echo "hello world"; done ในเฟรมที่สอง Mx shell เชลล์ที่สองแทบจะไม่แสดงผลเลย (แทบจะไม่ได้ผลเลยหลังจากพยายามซ้ำหลายครั้ง) เห็นได้ชัดว่า emacs จะไม่มีวันหยุดพักจากการอ่านเอาต์พุตของเชลล์แรกเพื่อฟังเอาต์พุตที่มาจากกระบวนการอื่น ๆ มันจะเป็นพฤติกรรมที่ดีกว่ามากสำหรับการปัดโรบินเมื่อมีหลายกระบวนการที่มีเอาต์พุตที่ค้างอยู่ มีวิธีใดที่จะทำให้พฤติกรรมดีขึ้นหรือไม่ เคล็ดลับเดียวที่ฉันรู้คือการทำให้เชลล์บัฟเฟอร์เป็นกระบวนการของตัวเอง แต่น่าเสียดายที่มันไม่ได้ผลสำหรับฉัน แม้ว่าฉันจะทำเช่นนั้นฉันก็ต้องเรียกใช้ subprocess เพื่อฟังซอคเก็ตเพื่อให้ซอฟต์แวร์รู้จำเสียงพูดทำงานได้เพื่อที่ฉันจะสามารถควบคุมเชลล์ได้ตั้งแต่แรกนั่นคือวิธีที่ฉันค้นพบสิ่งนี้ การเรียกใช้ลูปไม่สิ้นสุดเช่นด้านบนป้องกันไม่ให้ข้อมูลใด ๆ ถูกถอดออกจากซ็อกเก็ต

3
Git Bash ใน emacs บน Windows
ฉันสามารถเรียกใช้ Bash shell ที่มาพร้อมกับ Git สำหรับ Windows ฉันใส่สิ่งนี้ลงใน.emacs: (defun git-bash () (interactive) (let ((explicit-shell-file-name "D:/Program Files/git/bin/bash")) (call-interactively 'shell))) จากนั้นM-x git-bashและ voila ทุบตีทำงาน แต่มีความแปลก: bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell ^[]0;MINGW64:/c/Users/M??rton^G MĂĄrton@Marci MINGW64 /c/Users/MĂĄrton $ และมันจะพิมพ์บรรทัดนั้นเริ่มต้นด้วย^[]หลังจากทุกคำสั่งที่ฉันรัน นอกจากนี้การเข้ารหัสจะเลอะ ฉันจะแก้ไขสิ่งนี้ได้.emacsอย่างไร

3
มีวิธีใดที่จะทำให้พรอมต์และเอาต์พุตก่อนหน้าไม่สามารถแก้ไขได้ในโหมด shell / term?
นี่เป็นคำถามที่ตื้นมาก แม้ว่าการansi-termเริ่มต้นทำงานได้อย่างถูกต้องเมื่อฉันเปิดมันครั้งแรกดูเหมือนว่าจะลดลงในโหมด 'แก้ไขได้' หลังจากคำสั่งไม่กี่คำเช่นเมื่อฉันC-a(เริ่มต้นบรรทัด) ตามด้วยC-k(เส้นฆ่า) มันจะลบล้างข้อความแจ้งทั้งหมด สำหรับสติที่สวยงามของฉันมีวิธีใดที่จะทำให้ข้อความแจ้งเตือนและผลลัพธ์ก่อนหน้านี้ไม่สามารถแก้ไขได้ (สำหรับshell) (อัปเดตเพื่อยกเว้นคำศัพท์ที่ระบุความแตกต่างที่มีความหมาย) ฉันใช้ zsh ใน Emacs 24.4; ระบบปฏิบัติการคือ LXDE (Ubuntu 14.04) ผ่าน Virtual Box (เป็นการดีที่ฉันยังคงสามารถเลื่อนเคอร์เซอร์ของฉันไปรอบ ๆ ... )

4
วิธีทำให้คำสั่ง shell-shell รันโดยใช้เชลล์โปรไฟล์และ hooks ไดเรกทอรีปัจจุบัน (เช่น direnv)
ฉันพยายามที่จะรับshell-commandและasync-shell-commandบูรณาการอย่างราบรื่นกับสองสามโปรแกรมใน.bashrcไฟล์ของฉันโดยเฉพาะdirenvในตัวอย่างนี้ ฉันพบว่าถ้าฉันปรับแต่งshell-command-switchฉันจะได้รับกระบวนการเปลือกโหลดโปรไฟล์ของฉันราวกับว่ามันเป็นเปลือกเข้าสู่ระบบแบบโต้ตอบปกติ: (setq shell-command-switch (purecopy "-ic")) (setq ชัดแจ้ง -bash-args '("-ic" "ส่งออก EMACS =; stty echo; bash")) นอกจากนี้ผมยังใช้exec เส้นทางจากเปลือก ว่าฉันมี~/.bashrcไฟล์ด้วย: ... eval "$ (direnv hook $ 0)" echo "foo" ข้างใน~/code/fooฉันมี.envrcไฟล์ด้วย: ส่งออก PATH = $ PWD / bin: $ PATH echo "bar" ถ้าฉันรันM-x shellด้วยdefault-directoryset to ~/code/foo, bash shell จะโหลดโปรไฟล์ของฉันอย่างถูกต้องและรัน direnv hook เพื่อเพิ่มเข้าไปในเส้นทางของฉัน: …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.