Điểm:0

kiểm tra vỏ đăng nhập không hoạt động trong .profile

lá cờ vn

Ubuntu 20.04, 5.8.0-63-chung, gnome-shell, gdm3

Shell đăng nhập của tôi được đặt thành/bin/sh

và tôi có dòng này trong $HOME/.profile tập tin:

shopt -q login_shell > /dev/null 2>&1 || xuất SHELL=/bin/zsh

Bây giờ từ sự hiểu biết của tôi xuất SHELL=/bin/zsh không nên được thực hiện khi đăng nhập phải không? bởi vì nó là một shell đăng nhập nên shopt -q login_shell > /dev/null 2>&1 là đúng.

Nhưng tôi nhận được $SHELL là /bin/zsh sau khi đăng nhập.

Trên thực tế, việc đặt $SHELL không phải là mối quan tâm của tôi, tôi muốn sử dụng shopt -q login_shell > /dev/null 2>&1 trong logic .zshrc. Tôi cần làm cho nó hoạt động để chạy có chọn lọc mọi thứ trong trình bao không đăng nhập.

Không thể tìm ra những gì đang xảy ra. Cần giúp đỡ!

Chỉnh sửa:

Shopt không phải là lệnh /bin/sh. Nhưng ngay cả việc thay đổi vỏ đăng nhập thành/bin/bash cũng không giúp được gì.

Điểm:1
lá cờ hr

cửa hàng không phải là một lệnh hợp lệ trong POSIX sh vỏ (cũng không phải zsh, sử dụng thiết lập/bỏ cài đặt), do đó sẽ xảy ra lỗi - làm cho bài kiểm tra của bạn trả về giá trị khác không một cách vô điều kiện:

$ bash -lc 'shopt -q login_shell; tiếng vang $?'

0

nhưng

$ sh -lc 'shopt -q login_shell; tiếng vang $?'
sh: 1: shopt: không tìm thấy
127

$ zsh -lc 'shopt -q login_shell; tiếng vang $?'
zsh:1: không tìm thấy lệnh: shopt
127

Từ ~/.profile (cũng như /etc/hồ sơ, cộng với các tệp trong /etc/profile.d mà nó cung cấp) có thể được đọc bởi các shell khác, cách tốt nhất là giữ cho nó tuân thủ POSIX. AFAIK cách POSIX để kiểm tra trình bao đăng nhập là kiểm tra xem $0 bắt đầu với một - nhân vật cũ

trường hợp $0 trong 
  -*) tiếng vang "vỏ đăng nhập"
   ;; 
   *) echo "vỏ không đăng nhập"
   ;;
thoát hiểm
Sayan Dey avatar
lá cờ vn
Đúng Cảm ơn. Nhưng ngay cả khi thay đổi thành/bin/bash cũng không hoạt động. Phải làm gì nếu tôi muốn chạy một cái gì đó ngay trong khi đăng nhập. Đã chỉnh sửa câu hỏi.
lá cờ hr
@SayanDey Tôi cũng không nghĩ `shopt` là hợp pháp trong `zsh` - đó là `setopt`/`unsetopt`.IIRC, cách *di động* để kiểm tra shell đăng nhập là kiểm tra xem ký tự đầu tiên của `$0` có phải là `-` hay không. Xem chỉnh sửa.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.