ดังที่garyjohn อธิบายไว้ในความคิดเห็นของเขาปัญหาเกี่ยวกับ
wget (ตัวเลือกและ args) | ทุบตี
อย่างน้อยที่สุดก็คือบางเชลล์ (เห็นได้ชัดว่าเป็นหนึ่งในนั้น) ไพพ์ไลน์ ( ) บังคับให้คำสั่งส่วนประกอบทั้งหมดเข้าสู่กระบวนการแยกกัน เมื่อคุณรันกระบวนการเชลล์ bash ที่เพิ่งเกิดใหม่จะเป็นกระบวนการแยกจากเชลล์หลัก, หลัก, เชิงโต้ตอบ ฟังก์ชั่นนามแฝง ฯลฯ ที่กำหนดไว้ในเอาต์พุตของคำสั่งทางด้านซ้ายจะถูกกำหนดไว้ใน bash shell ใหม่ - ซึ่งจะออกโดยไม่อ่านคำสั่งใด ๆ จากเทอร์มินัล / แป้นพิมพ์ของคุณ เชลล์โดยไม่มีฟังก์ชั่น ฯลฯ
cmd1 | cmd2
something | bash
ดังที่ garyjohn แนะนำวิธีหนึ่งในการแก้ปัญหานี้และรับฟังก์ชั่น, นามแฝง, อื่น ๆ ที่กำหนดไว้ในเชลล์หลักของคุณคือการดาวน์โหลดคำสั่งลงในไฟล์ เช่น,
wget -O - http://xxx.github.io/dotfiles/bashrc > bashrc && bashrc && rm bashrc
แต่นั่นไม่ใช่วิธีเดียว เคล็ดลับคือการสร้างไปป์โดยไม่ต้องสร้างไปป์ไลน์ เคล็ดลับในการทำเช่นนี้คือการใช้การทดแทนกระบวนการ
(ส่วนขยายทุบตีเพื่อทดแทนคำสั่ง )
. <(wget -O - http://xxx.github.io/dotfiles/bashrc)
จะกำหนดฟังก์ชันนามแฝง ฯลฯ โดยไม่ต้องสร้างไฟล์ชั่วคราว
อีกวิธีคือ
wget -O - http://xxx.github.io/dotfiles/bashrc | . / dev / stdin
สิ่งนี้จะไม่ทำงานสำหรับทุบตี (เพราะทำตาม
.
คำสั่งในเชลล์ย่อย) แต่มันอาจใช้ได้กับเชลล์อื่น ๆ (เช่น ksh)
แน่นอนว่าคำเตือนมาตรฐานจะมีผล: ระมัดระวังการดำเนินการคำสั่งที่คุณดาวน์โหลดจากเว็บ หากคุณใช้เซิร์ฟเวอร์ที่เพิ่มความแข็งบนเครือข่ายท้องถิ่นข้างต้นอาจค่อนข้างปลอดภัย มิฉะนั้นถ้าใครบางคนแฮ็คเว็บเซิร์ฟเวอร์คุณกำลังเปิดประตูให้เขาเรียกใช้คำสั่งโดยพลการบนเครื่องของคุณ มันจะปลอดภัยกว่า (แม้ว่าจะน่าเบื่อกว่าชัดเจนกว่า) ในการดาวน์โหลดคำสั่งลงในไฟล์แล้วทำการตรวจสอบมัน จากนั้นหากการตรวจสอบถูกต้องคุณสามารถแหล่งไฟล์
. bashrc
วิธีเดียวที่ฉันรู้ว่าจะได้รับการนิยามเหล่านั้นลงในสภาพแวดล้อมที่เปลือกของคุณคือการบันทึกไฟล์ที่ดาวน์โหลดมาแล้วแหล่งที่มาของมันเช่น