Score:0

การตรวจสอบเชลล์การเข้าสู่ระบบไม่ทำงานใน .profile

ธง vn

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

เชลล์ล็อกอินของฉันถูกตั้งค่าเป็น /bin/sh

และฉันมีบรรทัดนี้ในของฉัน $HOME/.profile ไฟล์:

shopt -q login_shell > /dev/null 2>&1 || ส่งออก SHELL=/bin/zsh

ตอนนี้จากความเข้าใจของฉัน ส่งออก SHELL=/bin/zsh ไม่ควรดำเนินการเมื่อเข้าสู่ระบบใช่ไหม เพราะมันเป็นเชลล์เข้าสู่ระบบดังนั้น shopt -q login_shell > /dev/null 2>&1 เป็นความจริง.

แต่ฉันได้รับ $SHELL เป็น /bin/zsh หลังจากเข้าสู่ระบบ

จริงๆ แล้วการตั้งค่า $SHELL ไม่ใช่ปัญหาของฉัน ฉันต้องการใช้ shopt -q login_shell > /dev/null 2>&1 ในตรรกะ .zshrc ฉันต้องทำให้มันใช้งานได้เพื่อเลือกรันสิ่งต่าง ๆ ในเชลล์ที่ไม่ได้เข้าสู่ระบบ

ไม่สามารถเข้าใจได้ว่าเกิดอะไรขึ้น ต้องการความช่วยเหลือ!

แก้ไข:

Shopt ไม่ใช่คำสั่ง /bin/sh แต่การเปลี่ยนล็อกอินเชลล์เป็น /bin/bash ก็ไม่ได้ช่วยอะไร

Score:1
ธง hr

ร้านค้า ไม่ใช่คำสั่งที่ถูกต้องใน POSIX เชลล์ (น zshซึ่งใช้ การตั้งค่า/ไม่ตั้งค่า) ดังนั้นจะเกิดข้อผิดพลาด - ทำให้การทดสอบของคุณคืนค่าไม่เป็นศูนย์โดยไม่มีเงื่อนไข:

$ bash -lc 'shopt -q login_shell; ก้อง $?'

0

แต่

$sh -lc 'shopt -q login_shell; ก้อง $?'
sh: 1: shopt: ไม่พบ
127

และ

$zsh -lc 'shopt -q login_shell; ก้อง $?'
zsh:1: ไม่พบคำสั่ง: shopt
127

เนื่องจาก ~/.profile (เช่นเดียวกับ /etc/profileบวกกับไฟล์ใน /etc/profile.d ที่มันมา) อาจถูกอ่านโดยเชลล์อื่น แนวทางปฏิบัติที่ดีที่สุดคือทำให้เป็นไปตาม POSIX วิธี AFAIK POSIX ในการตรวจสอบเชลล์ล็อกอินคือการทดสอบว่า $0 เริ่มต้นด้วย ก - ตัวละครเช่น

กรณี $0 ใน 
  -*) echo "ล็อกอินเชลล์"
   ;; 
   *) echo "เชลล์ที่ไม่ได้เข้าสู่ระบบ"
   ;;
เอสแซค
Sayan Dey avatar
vn flag
ขอบคุณ แต่ถึงแม้จะเปลี่ยนเป็น /bin/bash ก็ไม่ทำงาน จะทำอย่างไรถ้าฉันต้องการเรียกใช้บางอย่างระหว่างการเข้าสู่ระบบ แก้ไขคำถาม
hr flag
@SayanDey ฉันไม่คิดว่า `shopt` จะถูกกฎหมายใน `zsh` เช่นกัน - มันคือ `setopt`/`unsetopt`IIRC วิธี *พกพา* ในการทดสอบเชลล์ล็อกอินคือการตรวจสอบว่าอักขระตัวแรกของ `$0` เป็น `-` หรือไม่ ดูการแก้ไข

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา