Sử dụng screenrc, làm cách nào tôi có thể khiến `Ca c` mở một cửa sổ mới tại thư mục làm việc của cửa sổ hiện tại?


2

Sử dụng screenrc, làm cách nào tôi có thể C-a cmở một cửa sổ mới trong thư mục làm việc của cửa sổ hiện tại? Theo mặc định, nó xuất hiện để mở cửa sổ mới tại thư mục làm việc tại thời điểm phiên màn hình gốc được gọi.

Câu trả lời:


0

Dựa trên câu trả lời SO này , tôi nghĩ rằng nó sẽ hoạt động:

bind c stuff "screen -X chdir \$PWD; screen^M"

Tôi sẽ đi thử nó trên vỏ từ xa của tôi và báo cáo lại nếu nó hoạt động với tôi.

chỉnh sửa: Yup, nó hoạt động. Lệnh "liên kết" đầu tiên thực sự không cần thiết.


1
Tôi đọc câu trả lời đó, nhưng nghĩ rằng công cụ giữ chỗ cho thứ khác. ^ M trong mẫu mã của bạn ở trên là gì?
Matt Joiner

Điều này đã làm điều đó, nhưng không có thêm ^ M, có lẽ đây là từ việc sao chép?
Matt Joiner

7

Theo mặc định, screencũng liên kết C-a C-cđể tạo một cửa sổ mới, vì vậy bạn có thể muốn thêm một dòng khác vào .screenrcđể xử lý trường hợp này:

bind c stuff "screen -X chdir \$PWD;screen^M"
bind ^c stuff "screen -X chdir \$PWD;screen^M"

Làm rõ về cách hoạt động của lệnh này:

  1. stuffđặt chuỗi đối số của nó trực tiếp vào cửa sổ hiện tại :

    Chỉ huy: stuff string

    Nhồi chuỗi stringtrong bộ đệm đầu vào của cửa sổ hiện tại.

  2. screen -X chdir \$PWDbáo cho màn hình thực thi lệnh chdir, thay đổi thư mục hoạt động của nó (nơi các cửa sổ màn hình mới sẽ bắt đầu) thành biến môi trường $PWDchứa thư mục làm việc hiện tại. Điều này là không thể làm trong .screenrcmột mình; do đó, thao tác bộ đệm đầu vào với stufflà cần thiết.

  3. Các screenlệnh trong vòng một đang chạy screentạo ra một cửa sổ mới chỉ thích C-a C-c.

  4. ^Mtạo ra một sự trở lại vận chuyển, nó báo cho shell thực hiện lệnh hiện đang nằm trong bộ đệm. Nếu không có nó, bạn sẽ phải nhấn enter(hoặc C-m, tất nhiên).

Do đó, liên kết này sẽ để lại hành trình như thế này trong cửa sổ bạn thực hiện nó trong:

user@host:~/directory$ screen -X chdir $PWD;screen
user@host:~/directory$

Bất cứ ý tưởng tại sao ^ M không cần thiết?
Matt Joiner

1
cần thiết, do đó, một lợi nhuận vận chuyển được tạo ra ở cuối stuffchuỗi.
Matt Eckert

Bất kỳ ý tưởng về làm thế nào để làm cho công việc này trong một phiên màn hình được đặt tên? superuser.com/questions/1038576/ cường @MattEckert
Paul Caheny

0

Đây là bản sao câu trả lời của riêng tôi cho một câu hỏi tương tự trên stackoverflow.com :

Để làm cho màn hình mở một tab / cửa sổ mới trong thư mục hiện tại, bạn có thể thêm mã sau vào .screenrctệp của mình :

bind c stuff "screen bash^M"

Điều này sẽ khiến lệnh Ctrl+ a cmở các tab / cửa sổ mới trong thư mục của cửa sổ / tab hiện tại.

Lưu ý: Bạn phải đảm bảo rằng screenkhông không bắt đầu một vỏ đăng nhập theo mặc định, vì đó sẽ gây ra sự khởi đầu vỏ trong thư mục mặc định cho một vỏ đăng nhập chứ không phải là thư mục hiện hành. Điều này có nghĩa là trong .screenrctệp của bạn , shelllệnh của bạn không thể bao gồm ký tự dấu gạch ngang ('-').

Ví dụ, điều này là sai (tức là nó sẽ bắt đầu một vỏ đăng nhập):

shell -$SHELL

Nhưng điều này đúng (nghĩa là nó sẽ không bắt đầu một vỏ đăng nhập):

shell $SHELL

Lưu ý 2: Thật không may, phương pháp này không hoạt động chính xác như lệnh cửa sổ / tab mới mặc định trong screen. Thay vào đó, nó viết lệnh vào cửa sổ hiện tại và thực thi nó để tạo cửa sổ / tab mới, vì vậy nó sẽ không hoạt động trong một quá trình shell chạy dài. Nói cách khác, phím tắt này chỉ có thể được thực thi bất cứ khi nào các lệnh shell thông thường có thể được thực thi.

Lưu ý 3: Nếu bạn muốn screenmở các cửa sổ / tab mới trong thư mục hiện tại mở một vỏ đăng nhập , bạn có thể thêm mã sau vào .screenrctệp của mình :

bind c stuff "screen bash -l^M"
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.