Sự cố với màn hình tự động bắt đầu khi đăng nhập SSH


7

Tôi đang xem http://taint.org/wk/RemoteLoginAutoScreen để thiết lập máy chủ của mình để nó tự động khởi động phiên màn hình khi tôi đăng nhập qua SSH.

Tôi đã thêm phần sau vào .bashrc của mình:

# Auto-screen invocation. see: http://taint.org/wk/RemoteLoginAutoScreen
# if we're coming from a remote SSH connection, in an interactive session
# then automatically put us into a screen(1) session.   Only try once
# -- if $STARTED_SCREEN is set, don't try it again, to avoid looping
# if screen fails for some reason.
if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x -a "${SSH_TTY:-x}" != x ]
then
  STARTED_SCREEN=1 ; export STARTED_SCREEN
  [ -d $HOME/lib/screen-logs ] || mkdir -p $HOME/lib/screen-logs
  sleep 1
  screen -RR && exit 0
  # normally, execution of this rc script ends here...
  echo "Screen failed! continuing with normal bash startup"
fi
# [end of auto-screen snippet]

Điều hấp dẫn là tôi luôn có một phiên màn hình có tên tách rời đang chạy một máy chủ ứng dụng rails. Bây giờ khi tôi đăng nhập, tôi được đưa vào phiên này.

Có cách nào để sửa đổi mã trên để không chọn phiên theo tên hoặc một số giá trị khác không? Nếu phiên tách rời là phiên màn hình duy nhất thì tôi muốn bắt đầu một phiên màn hình mới.

Một vấn đề khác mà tôi gặp phải là khi tách ra, tôi hoàn toàn đăng xuất khỏi kết nối SSH của mình thay vì chỉ rời khỏi phiên màn hình.


Kiểm tra để trống PS1là một cách phổ biến nhưng bị hỏng để kiểm tra xem vỏ có tương tác hay không. Đặc biệt, có nhiều hệ thống PS1kết thúc một biến môi trường, được đặt trong mọi shell mà bạn chạy. Sử dụng case $- in *i*) echo interactive;; *) echo not interactive;; esachoặc trong bash [[ $- = *i* ]]để kiểm tra vỏ tương tác. Sử dụng [ -t 0 ]để kiểm tra nếu đầu vào tiêu chuẩn là một thiết bị đầu cuối.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


8

Thay đổi nó thành:

if [ -z "$STARTED_SCREEN" ] && [ -n "$SSH_TTY" ]
then
  case $- in
    (*i*)
      STARTED_SCREEN=1; export STARTED_SCREEN
      mkdir -p -- "$HOME/lib/screen-logs"
      screen -RR -S main  ||
        echo >&2 "Screen failed! continuing with normal bash startup"
  esac
fi

Đó là đính kèm (hoặc tạo) phiên màn hình được gọi là "chính" thay vì phiên khác và không thoát sau khi màn hình đã trở lại thành công.


Đề nghị của bạn hoạt động hoàn hảo! Cảm ơn bạn. :)
daemonofchaos

@Stephan Chazelas Ý nghĩa của nó là gì $-, khi tôi sử dụng từng cái thì nó hiển thị himBH, ý nghĩa của nó là gì? cảm ơn trước sự giúp đỡ nào :)
Rahul Patil

@RahulPatil Nó chứa tập hợp các tùy chọn shell hiện tại ( icho tương tác ( -itùy chọn)). Xem hướng dẫn sử dụng vỏ của bạn để biết chi tiết.
Stéphane Chazelas
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.