ฮุก VPN ที่ส่งออกปลายทาง API เปลี่ยนสภาพแวดล้อมของโพรเซสที่มันเริ่ม ไม่ใช่ของเทอร์มินัลที่เปิดอยู่แล้วตอนที่อุโมงค์ขึ้น ความต่างข้อเดียวนี้คือคำอธิบายของรายงาน «เครื่องมือยังเรียกปลายทางสาธารณะอยู่» ส่วนใหญ่ มีสองตำแหน่งที่ใช้งานได้สำหรับการตั้งค่านี้ และการเลือกขึ้นอยู่กับว่าใครใช้มันและมันเปลี่ยนบ่อยแค่ไหน เปรียบเทียบทั้งสองก่อนที่คุณจะเพิ่มสคริปต์เริ่มทำงานอีกตัว

สองตำแหน่งที่การตั้งค่าอาศัยอยู่ได้

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

PropertyPrefix on the commandExport from the hook
Who receives itThat invocation onlyChildren the hook starts
LifetimeUntil the process exitsUntil the hook's own session ends
LeakageScoped to one commandApplies to later commands in that session
Repeat costEvery invocationOnce per connection
Works for an open editorNo, unless the editor is started with itNo

ตารางทำให้ฮุกดูถูกและซ่อนบิลจริง มันยังเลือกปลายทางส่วนตัวให้คำสั่งที่ไม่เกี่ยวกับงานด้วย อ่านแต่ละแถวเป็นข้อจำกัด ไม่ใช่ความชอบ ถ้าปลายทางเปลี่ยนตามงาน คำนำหน้าชนะด้านความแม่นยำแม้ต้องเสียการกดปุ่มหนึ่งครั้ง

ทำไมฮุกจึงเข้าถึงเชลล์ที่เปิดอยู่แล้วไม่ได้

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

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

การทดสอบที่ถูกที่สุดคือพิมพ์ตัวแปรจากจุดที่ล้มเหลว ไม่ใช่จากเชลล์ที่ทำงานได้ ถ้าโพรเซสที่ล้มเหลวเริ่มก่อนอุโมงค์ การส่งออกก็ไม่เคยมีโอกาส

รูปแบบต่อคำสั่ง เขียนออกมา

คำนำหน้าทำให้ตัวเลือกมองเห็นได้ในคำสั่งที่ใช้มัน ซึ่งช่วยเมื่อปลายทางเปลี่ยนระหว่างงาน

env INTERNAL_API='https://internal-api.example.net:8443' my-work-tool

คำสั่งนี้เป็นเพียงตัวอย่าง my-work-tool เป็นตัวแทน และ INTERNAL_API ไม่ใช่มาตรฐาน VPN ดังนั้นให้แทนที่ด้วยการตั้งค่าที่มีเอกสารของโปรแกรมที่คุณรันจริงและโฮสต์ที่ได้รับอนุมัติของคุณ อย่าใส่โทเคนหรือรหัสผ่านในบรรทัดเดียวกัน เพราะมันจะไปอยู่ในประวัติของเชลล์

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

โหลดใหม่ รีสตาร์ท หรือปล่อยไว้

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

การตัดการเชื่อมต่อเป็นการตัดสินใจแยกต่างหาก การหยุดชั่วคราว การปิด หรือการเชื่อมต่อใหม่เป็นเรื่องของแอปพลิเคชัน และตัวแปรปลายทางไม่ได้ควบคุมมัน มองตัวแปรเป็นการกำหนดค่าที่เลือกที่อยู่ ไม่ใช่กฎเกี่ยวกับทราฟฟิกเครือข่ายที่ใช้ได้หลังจากนั้น และทั้งสองเรื่องยังแยกจากกันได้

บทความที่เกี่ยวข้อง