2013-02-16 22 views

Trả lời

4

screen không duy trì lịch sử của các lệnh bạn nhập. Vỏ của bạn có thể hoặc không thể giữ một lịch sử. Vì bạn dường như sử dụng bash, bạn có thể sử dụng lệnh history.

screen không xuất hiện để có một xấp xỉ thô của một tìm kiếm lịch sử (nó chỉ đơn thuần là tìm kiếm các bộ đệm scrollback cho một dòng lệnh. Xem trang screen người đàn ông theo "lịch sử" lệnh (ràng buộc để C-a { theo mặc định).

+1

Bạn có nghĩa là từ một cửa sổ khác trong cùng một phiên (hoặc có thể từ một phiên khác không)? Có thể. Nó sẽ liên quan đến phân tích cú pháp bộ đệm cuộn của cửa sổ đích. Tuy nhiên, tôi không đủ quen thuộc với màn hình để biết cách truy cập vào chương trình đó. Bạn có thể thử đọc trang người đàn ông để biết thông tin về cách thực hiện điều đó. – chepner

2

Khi bạn exit một thiết bị đầu cuối (hoặc vỏ) vỏ viết lịch sử của nó đến $ HISTFILE, vì vậy để có được lịch sử của nó trong thiết bị đầu cuối khác, bạn có thể gõ exit trong terminal bạn muốn lịch sử và nó sẽ được viết ra.

cat $HISTFILE 
#or tac, less, $EDITOR, ... depending on how you want to "access" it 
+0

Chỉ được viết trên 'thoát'? – hexacyanide

+1

AFAIK, cho đến khi đó nó được lưu trữ trong bộ nhớ lên đến $ HISTSIZE dòng, khi nó viết nó giữ các tập tin lịch sử để $ HISTFILESIZE dòng tối đa – technosaurus

+0

Tôi quên về 'shopt -s histappend' xem: http: //unix.stackexchange.com/question/6501/why-would-anyone-not-set-histappend-in-bash – technosaurus

1

@technosau rus là đúng. $ HISTFILE được viết khi thoát bash, vì vậy bạn có thể thoát khỏi một phiên bash, và bắt đầu một phiên mới, và lịch sử nên được bảo tồn thông qua tệp.

Nhưng tôi nghĩ rằng có một cách tốt hơn để giải quyết vấn đề của bạn. Sổ tay bash bao gồm mô tả của history built-in command. Nó cho phép bạn lưu lịch sử này với history -w [filename] và đọc lịch sử với history -r [filename]. Nếu bạn không cung cấp tên tệp, tên tệp sẽ sử dụng $ HISTFILE.

Vì vậy, tôi sẽ đề xuất bạn lưu lịch sử bên trong phiên màn hình của bạn vào một tệp cụ thể (hoặc vào $ HISTFILE mặc định của bạn nếu bạn muốn). Sau đó đọc tệp lịch sử trong phiên bash khác mà bạn muốn truy cập lịch sử. Bằng cách này bạn không phải thoát khỏi phiên bash gốc.

21

Tôi sử dụng vỏ bash mặc định trên hệ thống của mình và vì vậy có thể không hoạt động với các trình bao khác.

đây là những gì tôi có trong tập tin ~/.screenrc của tôi vì vậy mà mỗi cửa sổ màn hình mới được lịch sử lệnh riêng của mình:

Mặc định màn hình của Windows Với riêng Lịch sử lệnh

Để mở một tập hợp các cửa sổ màn hình mặc định, mỗi với tập tin lịch sử lệnh riêng của họ, bạn có thể thêm dòng sau vào các ~/.screenrc file:

screen -t "window 0" 0 bash -ic 'HISTFILE=~/.bash_history.${WINDOW} bash' 
screen -t "window 1" 1 bash -ic 'HISTFILE=~/.bash_history.${WINDOW} bash' 
screen -t "window 2" bash -ic 'HISTFILE=~/.bash_history.${WINDOW} bash' 

Đảm bảo mới cho Windows Get riêng lịch sử chỉ huy của họ

Cài đặt màn hình mặc định có nghĩa là bạn tạo một cửa sổ mới bằng cách sử dụng Ctrl+a c hoặc Ctrl+a Ctrl+c. Tuy nhiên, với chỉ ở trên trong tệp ~/.screenrc của bạn, các tệp này sẽ sử dụng tệp ~/.bash_history mặc định. Để khắc phục điều này, chúng tôi sẽ ghi đè các ràng buộc chính để tạo cửa sổ mới.Thêm phần này vào tập tin ~/.screenrc của bạn:

bind c screen bash -ic 'HISTFILE=~/.bash_history.${WINDOW} bash' 
bind ^C screen bash -ic 'HISTFILE=~/.bash_history.${WINDOW} bash' 

Bây giờ bất cứ khi nào bạn tạo ra một cửa sổ màn hình mới, nó thực sự tung ra một vỏ bash, thiết lập các biến môi trường HISTFILE để cái gì đó bao gồm số cửa sổ màn hình hiện tại ($WINDOW).

Tệp lịch sử lệnh sẽ được chia sẻ giữa các phiên màn hình với cùng số cửa sổ.

Viết lệnh để $HISTFILE Thi hành

Như là hành vi bình thường bash, lịch sử chỉ được ghi vào tệp $HISTFILE bởi lúc đi ra khỏi cửa sổ shell/màn hình. Tuy nhiên, nếu bạn muốn lệnh để được ghi vào tập tin lịch sử sau khi lệnh được thực thi, và do đó có sẵn ngay cho phiên màn hình khác với số lượng cùng một cửa sổ, bạn có thể thêm một cái gì đó như thế này để tập ~/.bashrc của bạn:

export PROMPT_COMMAND="history -a; history -c; history -r; ${PROMPT_COMMAND}" 
+0

Điều này là gần nhất với những gì tôi muốn, nhưng ... cố gắng tìm một cách để lưu tất cả vào một tập tin lịch sử. 'HISTSIZE' vv dường như không dính nếu bạn nhúng chúng vào lệnh' screen' ở trên. – beroe

1

history sẽ hiển thị tất cả lệnh lịch sử.

0

sử dụng này: màn hình -L với vốn L nó sẽ lưu một bản sao của đầu vào và đầu ra thiết bị đầu cuối để một file có tên screenlog.0 hoặc nếu bạn sử dụng -S để đặt tên cho nó, các file log được màn hình tên

+0

Nhưng lưu ý: Thao tác này sẽ ghi lại đầu ra cũng như đầu vào. – abalter

0

tôi đặt dòng tiếp theo vào .bashrc của tôi:

case "$TERM" in 
    screen) 
     declare SCREEN_NAME=$(echo $STY | sed -nr 's/[^.]*\.(.*)/\1/p') 
     if [[ $SCREEN_NAME ]]; then 
      HISTFILE="${HISTFILE}.${SCREEN_NAME}.${WINDOW}" 
      declare -p HISTFILE 
     fi 
     unset SCREEN_NAME 
     ;; 
    *) 
     ;; 
esac 

.bashrc mặc định của tôi có 'trường hợp' này về cơ bản với 'xterm * | rxvt *)' giá trị, vì vậy tôi chỉ thêm vào màn hình 'của tôi 'một phần vào nó. Nếu bạn chưa có này 'trường hợp', bạn có thể sử dụng tiếp theo thay vì nó:

if [[ $TERM == screen ]]; then 
    declare SCREEN_NAME=$(echo $STY | sed -nr 's/[^.]*\.(.*)/\1/p') 
    if [[ $SCREEN_NAME ]]; then 
     HISTFILE="${HISTFILE}.${SCREEN_NAME}.${WINDOW}" 
     declare -p HISTFILE 
    fi 
    unset SCREEN_NAME 
fi 

Và sau khi tôi có một bash_history riêng cho tất cả các cửa sổ của tất cả của tôi màn hình.

Lưu ý: điều này không hoạt động trong chroot!

Các vấn đề liên quan