Chạy một subshell từ giữa lệnh hiện tại


16

Tôi thường xuyên tìm thấy chính mình trong kịch bản này. Tôi đang ở giữa gõ một lệnh và tôi cần kiểm tra một cái gì đó khác trước khi tôi hoàn thành nó.

Có cách nào để mở một subshell của một loại nào đó với đầu vào hiện tại của tôi cho đến nay vẫn được ghi nhớ, sau đó khi tôi thoát khỏi subshell này, tôi trở lại nơi tôi đang ở?

$ mylongcommand -n -e <SOME KEY COMBINATION WHICH OPENS A SUBSHELL>
$ date
...
$ exit
$ mylongcommand -n -e <BACK TO WHERE I WAS>

Tôi đang sử dụng zsh


2
Tại sao không chỉ mở một cửa sổ đầu cuối khác?
Barmar

@Barmar Đối với tôi, tôi không sử dụng GUI trên hầu hết các hệ thống linux của mình nên tôi sẽ phải chuyển TTY. Có nghĩa là tôi phải xác thực lại. Các tùy chọn dưới đây hiệu quả hơn nhiều.
Zachary Brady

3
Bạn có thể sử dụng screenhoặc tmuxđể có được nhiều thiết bị đầu cuối ảo trên bàn điều khiển.
Barmar

Câu trả lời:


16

Có tổ hợp phím EscQlưu bộ đệm lệnh và cho phép nhập lệnh mới. Sau khi chạy lệnh, bộ đệm chứa những gì bạn đã nhập trước đó. Nếu bạn phải chạy một lệnh khác trước khi hoàn thành, bạn có thể gõ EscQlại.

(Tôi đã không thử mở một subshell sau khi nhấn EscQ.)

Xem http://zsh.sourceforge.net/Intro/intro_10.html và tìm kiếm "esc-q"


Đây chính xác là những gì tôi muốn, cảm ơn rất nhiều! Tôi có thể làm cho nó chạy một cái vỏ lồng nhau thay vì quay trở lại ngay lập tức nhưng với trường hợp sử dụng của tôi, việc trả lại ngay lập tức hoạt động hoàn hảo.
Panayiotis


7

Giải pháp của tôi cho vấn đề này là công nghệ thấp và cồng kềnh, nhưng dựa vào các chuỗi khóa mà bạn có thể đã quen thuộc: Hit Ctrl+ A, sau đó #, sau đó ENTER.

Điều này có tác dụng chèn một dòng #ở đầu dòng, do đó làm cho nó trở thành một nhận xét, sau đó thực hiện nó, do đó đẩy nó vào lịch sử lệnh. Sau đó, bạn có thể nhập lệnh phụ trợ của mình, sau đó cuộn qua lịch sử lệnh đến lệnh đã nhận xét, xóa #và hoàn thành lệnh khi cần.


Bạn nên nhấn nút "home" trên bàn phím, nó sẽ tiết kiệm được 1 lần nhấn phím và năng lượng cần thiết để thực sự nhấn nó
Ferrybig

@Ferrybig - vâng, điều đó thật tốt, mặc dù đối với bàn phím hàng ngày của tôi là MacBook Pro không có phím HOME . Các CHỦ tương đương là FN + mũi tên trái , nhưng có thể cuộn lên đến đỉnh của nhà ga.
Chấn thương kỹ thuật số

2

Tôi gõ Ctrl+ Zvào và tạm dừng lệnh Lệnh tôi đang gõ và gõ một lệnh khác. Sau khi tôi chạy lệnh đó (hoặc hủy bỏ nó bằng Ctrl+ C), lệnh bị treo sẽ quay lại phiên bản (thậm chí ghi nhớ vị trí con trỏ). Để thuận tiện hơn, nếu dòng lệnh trống khi tôi gõ Ctrl+ Z, khóa sẽ gọi hàm tích bghợp thay thế (vì vậy, double Ctrl+ Zsẽ gửi lệnh chạy trực tiếp đến nền).

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

(Trước đó niêm yết tại Ghi một lệnh nửa gõ trong khi tôi kiểm tra một cái gì đó mà chủ yếu có các giải pháp cho bash, nơi bạn không thể làm bất cứ điều gì rất thuận tiện. Đây là một phiên bản hơi fancier của built-in ràng buộc của M-qđểpush-line .)

Điều này không chạy một subshell: lệnh mà bạn gõ sau khi đình chỉ một lần nữa, lệnh trước đó chạy trong cùng một shell. Điều này cho phép bạn làm những việc như thay đổi thư mục hiện tại nếu bạn nhận ra sau khi gõ một lệnh mà bạn muốn chạy nó trong một thư mục khác. Nếu bạn muốn chạy một phiên bản shell mới, bạn có thể chạy zshtừ một ràng buộc chính, nhưng tôi không nghĩ điều đó đặc biệt hữu ích.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.