เดอะ เปลือก เป็นล่ามบรรทัดคำสั่งที่แปลคำสั่งที่ป้อนโดยผู้ใช้เป็นการดำเนินการที่ระบบปฏิบัติการจะดำเนินการ เชลล์สามารถเริ่มต้นด้วยวิธีโต้ตอบ (ซึ่งผู้ใช้สามารถพิมพ์และดำเนินการคำสั่ง) หรือไม่ใช่วิธีโต้ตอบ (แยกโดยสคริปต์หรือโปรแกรมเช่น crontabฯลฯ).
เชลล์แบบโต้ตอบเริ่มต้นภายในเทอร์มินัลอีมูเลเตอร์ ซึ่งอ้างถึงแอปพลิเคชัน GUI เป็น คำพังเพย-terminal, เอ็กซ์เทอมฯลฯ หรือภายใน TTY ซึ่งอ้างถึงคอนโซลข้อความเสมือน TTY สามารถเข้าถึงได้โดยการกดคีย์ผสม Ctrl Alt F1-9. ในการแจกแจงเดสก์ท็อปของ Linux สภาพแวดล้อมเดสก์ท็อปกำลังทำงานภายในหนึ่งใน TTY เหล่านี้
อ้างอิง:
ไม่ว่าจะเป็นเทอร์มินัลอีมูเลเตอร์หรือ TTY คุณก็สามารถทำสิ่งเดียวกันได้โดยมีเชลล์ทำงานอยู่ข้างใน
เชลล์ของผู้ใช้เริ่มต้นใน Ubuntu คือ ทุบตี. มีการเรียกใช้ไฟล์เริ่มต้น .bashrc
ซึ่งอยู่ในโฮมไดเร็กทอรีของผู้ใช้ ไฟล์นี้ (พร้อมกับไฟล์เริ่มต้นระบบอื่นๆ เช่น /etc/bash.bashrc
) เป็น ที่มา เมื่อผู้ใช้เปิดเชลล์แบบโต้ตอบใหม่ ดังนั้นสภาพแวดล้อมเริ่มต้นของผู้ใช้จึงถูกสร้างขึ้น
แท้จริงโดยการจัดหา .bashrc
ตัวแปรสภาพแวดล้อมบางตัวได้รับค่าบางอย่าง ตัวแปรสภาพแวดล้อมดังกล่าวคือ:
$เส้นทาง
ซึ่งมีเส้นทางระบบที่คั่นด้วยคอลัมน์ซึ่งสามารถพบไฟล์ปฏิบัติการได้
$PS1
ซึ่งกำหนด พรอมต์ของคุณมีลักษณะอย่างไร, เช่น.: user@host:/current/directory$,
$LANG
ซึ่งตั้งค่าภาษาเริ่มต้นหรือ $LC_ALL
ซึ่งแทนที่การตั้งค่าโลแคลทั้งหมด (แหล่งที่มา ของคำอธิบายนี้ อ่านต่อได้ที่ สถานที่ของผู้ชาย
).
ดังนั้นหากคุณต้องการเปลี่ยนตัวแปรสภาพแวดล้อมบางอย่างอย่างถาวร (ภายใน Bash shell ของผู้ใช้) คุณสามารถแก้ไข (หรือตั้งค่า) ค่าของมันได้ภายใน .bashrc
. มิฉะนั้น การเปลี่ยนแปลงจะมีผลกับอินสแตนซ์ปัจจุบันของเชลล์เท่านั้น
เช่น เปิดเทอร์มินัลใหม่แล้วพิมพ์ PS1='พร้อมท์_เปลี่ยน->'
และพรอมต์ของคุณจะเปลี่ยนเป็นสตริงนั้น จากนั้นเปิดหน้าต่างเทอร์มินัลค้างไว้และเปิดเทอร์มินัลใหม่ - คุณจะเห็นว่าการเปลี่ยนแปลงนี้ไม่ได้มีผล ในการกู้คืนเทอร์มินัลแรก คุณสามารถจัดหาด้วยตนเองได้ .bashrc
ไฟล์ตามคำสั่ง . ~/.bashrc
.
เมื่อคุณใช้ ส่งออก
คำสั่งที่คุณกำลังส่งออกตัวแปรไปยัง เปลือกย่อย ที่แยกจากเชลล์ปัจจุบัน (เชลล์ลูก) ไม่ใช่เชลล์อื่น (พี่น้อง) ที่สร้างโดยกระบวนการพาเรนต์ของเชลล์ปัจจุบันนี่คือตัวอย่าง:
user@host:~$ VAR='สวัสดี!' # กำหนดตัวแปรที่เรียกว่า VAR
user@host:~$ echo $VAR # ส่งออกค่าของตัวแปร
สวัสดี!
user@host:~$ ส่งออก VAR # ส่งออกตัวแปร
user@host:~$ bash # แยก bash shell ใหม่
user@host:~$ echo $VAR # ส่งออกค่าของตัวแปรที่ส่งออก
สวัสดี!
user@host:~$ exit # ออกจากพาเรนต์เชลล์
user@host:~$sh # แยกเปลือก sh (เส้นประ) ใหม่
$ echo $VAR # ส่งออกค่าของตัวแปรที่ส่งออก
สวัสดี!
คำสั่ง สิ่งแวดล้อม
ใช้เพื่อเปลี่ยนสภาพแวดล้อมของคำสั่งหรือการดำเนินการสคริปต์ นี่คือบางบรรทัดจาก ผู้ชาย
:
สิ่งแวดล้อม
- ตั้งค่าสภาพแวดล้อมสำหรับการเรียกใช้คำสั่ง เดอะ สิ่งแวดล้อม
ยูทิลิตี้จะต้องได้รับสภาพแวดล้อมปัจจุบันแก้ไข
ตามอาร์กิวเมนต์แล้วเรียกใช้ยูทิลิตีที่ตั้งชื่อโดย
ตัวดำเนินการยูทิลิตี้กับสภาพแวดล้อมที่แก้ไข
-ผม
เรียกใช้ยูทิลิตี้ด้วยสภาพแวดล้อมที่ระบุโดยอาร์กิวเมนต์ สภาพแวดล้อมที่สืบทอดมาจะถูกละเว้นโดยสิ้นเชิง
คำสั่งต่อไปนี้: env -i PATH=/mybin mygrep xyz myfile
เรียกใช้คำสั่ง ไมเกรป
กับใหม่ เส้นทาง
ค่าเป็นรายการเดียวในสภาพแวดล้อม ในกรณีนี้, เส้นทาง
ใช้เพื่อค้นหา ไมเกรป
ซึ่งจะต้องอาศัยอยู่ใน /มายบิน
.
สิ่งแวดล้อม
มักใช้ที่จุดเริ่มต้นของสคริปต์ (ภายในสิ่งที่เรียกว่า shebang) เพื่อเพิ่มความสะดวกในการพกพา นี่คือสองหัวข้อที่ครอบคลุมการใช้งานนี้:
เมื่อทำงานโดยไม่มีข้อโต้แย้ง the สิ่งแวดล้อม
คำสั่งส่งออกรายการของตัวแปรสภาพแวดล้อม
อีกครั้งที่ .bashrc
ไฟล์ในโฮมไดเร็กทอรีปรับแต่งคุณลักษณะของเชลล์ เช่น การสร้างหรือแก้ไขตัวแปรและนามแฝง และการกำหนดฟังก์ชัน
ตัวอย่างเช่น ลองกำหนดฟังก์ชันต่อไปนี้ที่ด้านล่างของ .bashrc
ไฟล์.
สวัสดี () { echo "สวัสดี ${USER^}!"; }
หลังจากบันทึกไฟล์แล้ว คุณสามารถจัดหาหรือเปิดอินสแตนซ์เทอร์มินัลใหม่และพิมพ์ได้ สวัสดี
.
spas@host:~$ สวัสดี
สวัสดี สปา!
ดังนั้นเราจึงเห็นฟังก์ชันนี้ (หรือตัวแปรหรือนามแฝง) มีอยู่ในเชลล์ปัจจุบัน ในขั้นนี้เรียกว่า ท้องถิ่น ฟังก์ชั่น (หรือตัวแปรหรือนามแฝง) ดังนั้นหากเราตรวจสอบสภาพแวดล้อมโดย env | สวัสดี
หน้าที่ของเราจะไม่อยู่ที่นั่น
ตัวแปรโลคัลมีอยู่เฉพาะในเชลล์ปัจจุบัน และไม่สามารถส่งผลกระทบต่อคำสั่งหรือแอ็พพลิเคชันอื่นๆ
หลังจากกำหนดฟังก์ชั่น (ตัวแปร, นามแฝง) ใน .bashrc
เราสามารถส่งออกเพื่อให้พร้อมใช้งานสำหรับเชลล์ย่อย (คำสั่งหรือสคริปต์) ที่แยกจากเชลล์ปัจจุบัน - ดังนั้นจึงกลายเป็น ทั่วโลก หรือ สิ่งแวดล้อม ฟังก์ชัน (ตัวแปรนามแฝง)
สวัสดี () { echo "สวัสดี ${USER^}!"; }
ส่งออก -f สวัสดี
spas@host:~$ source ~/.bashrc # ใน bash 'source' คือบทสรุปของ '.'
spas@host:~$env | grep 'hello' # แยกวิเคราะห์ 'hello' ภายในผลลัพธ์ของ 'env'
BASH_FUNC_hello%%=() { echo "สวัสดี ${USER^}!"
spas@host:~$ bash -c 'hello' # แยกเชลล์ย่อยที่ไม่ใช่แบบโต้ตอบ
สวัสดี สปา! #และดำเนินการฟังก์ชั่นภายใน
โปรดทราบว่าในกรณีส่วนใหญ่เชลล์ที่ไม่ใช่แบบโต้ตอบไม่ได้มาจากค่าเริ่มต้นของไฟล์การกำหนดค่าเริ่มต้นเป็น .bashrc
ดังนั้นสภาพแวดล้อมของพวกมันจึงถูกจำกัดมากกว่าสภาพแวดล้อมของเชลล์แบบโต้ตอบ
ตัวอย่างเช่น เมื่อคุณออกแบบสคริปต์ที่จะใช้โดย crontab คุณต้องใช้เส้นทางแบบเต็มไปยังคำสั่งหรือตรวจสอบให้แน่ใจว่ามีสภาพแวดล้อมที่จำเป็น