ฉันต้องการเรียกใช้คำสั่งย่อย bash (1) เรียกใช้คำสั่งไม่กี่คำ (2) จากนั้นยังคงอยู่ใน subshell นั้นเพื่อทำตามที่ฉันต้องการ ฉันสามารถทำสิ่งเหล่านี้เป็นรายบุคคล:
เรียกใช้คำสั่งโดยใช้
-c
แฟล็ก:$> bash -c "ls; pwd; <other commands...>"
อย่างไรก็ตามมันจะกลับสู่เชลล์ "super" ทันทีหลังจากเรียกใช้งานคำสั่ง ฉันยังสามารถเรียกใช้ subshell แบบโต้ตอบ:
เริ่ม
bash
กระบวนการใหม่:$> bash
และมันจะไม่ออกจาก subshell จนกว่าฉันจะพูดอย่างชัดเจน ... แต่ฉันไม่สามารถเรียกใช้คำสั่งเริ่มต้นใด ๆ ทางออกที่ใกล้ที่สุดที่ฉันพบคือ:
$> bash -c "ls; pwd; <other commands>; exec bash"
ซึ่งใช้งานได้ แต่ไม่ใช่วิธีที่ฉันต้องการเพราะมันรันคำสั่งที่กำหนดในเชลล์ย่อยหนึ่งจากนั้นเปิดคำสั่งแยกต่างหากสำหรับการโต้ตอบ
ฉันต้องการทำสิ่งนี้ในบรรทัดเดียว เมื่อฉันออกจาก subshell ฉันควรกลับไปที่เปลือก "super" ปกติโดยไม่เกิดปัญหา ต้องมีวิธี ~~
NB: สิ่งที่ฉันไม่ได้ขอ ...
- ไม่ถามว่าจะรับหน้า bash man ได้ที่ไหน
- ไม่ถามว่าจะอ่านคำสั่งเริ่มต้นจากไฟล์ได้อย่างไร ... ฉันรู้วิธีการทำสิ่งนี้ไม่ใช่วิธีการแก้ปัญหาที่ฉันต้องการ
- ไม่สนใจที่จะใช้หน้าจอ tmux หรือ gnu
- ไม่สนใจที่จะให้บริบทกับเรื่องนี้ เช่นคำถามนี้ตั้งใจให้เป็นเรื่องทั่วไปไม่ใช่เพื่อวัตถุประสงค์เฉพาะใด ๆ
- ถ้าเป็นไปได้ฉันต้องการหลีกเลี่ยงการใช้วิธีการแก้ปัญหาที่ประสบความสำเร็จตามที่ฉันต้องการ แต่ด้วยวิธี "สกปรก" ฉันแค่ต้องการทำสิ่งนี้ในบรรทัดเดียว โดยเฉพาะฉันไม่ต้องการทำอะไร
xterm -e 'ls'
exec bash
วิธีแก้ปัญหาเกี่ยวข้องกับสอง subshells แยก ฉันต้องการ subshell หนึ่งอัน
exec
มันคือการแทนที่ subshell แรกด้วยอันที่สองดังนั้นคุณเหลือเพียง 1 shell ที่อยู่ใต้แม่ หากคำสั่งเริ่มต้นของคุณตั้งค่าตัวแปรสภาพแวดล้อมพวกเขาจะมีอยู่ในเปลือก exec'ed
exec
คือคุณสูญเสียสิ่งใดก็ตามที่ไม่ได้ถูกส่งผ่านไปยัง subshells ผ่านทางสภาพแวดล้อมเช่นตัวแปรที่ไม่ได้ถูกส่งออกฟังก์ชั่นนามแฝง ...
exec bash
แก้ปัญหาที่ไม่เหมาะสมสำหรับคุณคืออะไร?