VPN ინსტრუმენტის პარამეტრები: გაშვების დროის გარემო თუ ექსპორტი კაუჭში?
კაუჭი თავის შვილ პროცესებს უშვებს და არა იმ ჭურვს, რომელიც უკვე გახსენით. გაშვების დროის გარემო პირად საბოლოო წერტილს მხოლოდ იმ ერთ ბრძანებაში ინახავს, რომელსაც ის სჭირდება.
VPN კაუჭი, რომელიც API საბოლოო წერტილს ექსპორტს უკეთებს, ცვლის იმ პროცესების გარემოს, რომლებსაც ის უშვებს და არა იმ ტერმინალისას, რომელიც გვირაბის აწევისას უკვე გახსნილი იყო. ეს ერთი განსხვავება ხსნის „ინსტრუმენტი კვლავ საჯარო საბოლოო წერტილს იძახებს“ შეტყობინებების უმეტესობას. პარამეტრის ჩასადებად ორი სამუშაო ადგილი არსებობს და არჩევანი დამოკიდებულია იმაზე, ვინ მოიხმარს მას და რამდენად ხშირად იცვლება. შეადარეთ ისინი, სანამ კიდევ ერთ გაშვების სკრიპტს დაამატებთ.
ორი ადგილი, სადაც პარამეტრი შეიძლება ცხოვრობდეს
პირველი ვარიანტია პრეფიქსი თავად ბრძანებაზე: მნიშვნელობა მხოლოდ ამ ერთი გამოძახებისთვის არსებობს და მასთან ერთად ქრება. მეორე ვარიანტია ექსპორტი კავშირის კაუჭის შიგნით, რომელიც აღწევს ყველა პროცესს, რომელსაც კაუჭი ამ წერტილის შემდეგ უშვებს. ისინი განსხვავდებიან მოცვისა და სიცოცხლის ხანგრძლივობით და არა სინტაქსით, და ეს განსხვავება წყვეტს წარუმატებლობების უმეტესობას.
| Property | Prefix on the command | Export from the hook |
|---|---|---|
| Who receives it | That invocation only | Children the hook starts |
| Lifetime | Until the process exits | Until the hook's own session ends |
| Leakage | Scoped to one command | Applies to later commands in that session |
| Repeat cost | Every invocation | Once per connection |
| Works for an open editor | No, unless the editor is started with it | No |
ცხრილი კაუჭს იაფად აჩვენებს და ნამდვილ ანგარიშს მალავს: ის პირად საბოლოო წერტილს ირჩევს იმ ბრძანებებისთვისაც, რომლებსაც ამოცანასთან კავშირი არ აქვთ. ყოველი სტრიქონი წაიკითხეთ როგორც შეზღუდვა და არა როგორც უპირატესობა. თუ საბოლოო წერტილი ამოცანიდან ამოცანაზე იცვლება, პრეფიქსი სიზუსტეში იმარჯვებს, თუნდაც ერთი კლავიშის დაჭერა დაჯდეს.
რატომ ვერ აღწევს კაუჭი უკვე გახსნილ ჭურვამდე
გარემოს ცვლადები პროცესს პროცესის გამოსახულების შექმნისას გადაეცემა. კავშირამდე დაწყებული ჭურვი მიღებულ ასლს ინახავს, და კაუჭის შიგნით შესრულებული ექსპორტი მანქანის ყველა პროცესისთვის გადაცემა არ არის. მას მხოლოდ კაუჭის საკუთარი შვილები მემკვიდრეობით იღებენ. ჭურვის საკუთარი შვილები იღებენ იმას, რაც ჭურვს მათი გაშვების მომენტში აქვს, და ამიტომ ერთი და იგივე ბრძანება ერთ ტერმინალში მუშაობს, მეორეში კი ვარდება.
იგივე ეხება გრაფიკულ რედაქტორს. მისი გაფართოებების ჰოსტი, ჩაშენებული ტერმინალი და ფონური ენის სერვერი გაშვებისას განშტოდნენ და საკუთარ ასლებს ინახავენ. საქაღალდის ხელახლა გახსნა ამ შვილებს აუცილებლად არ აახლებს, ამიტომ დამატებული პარამეტრი მაინც არასოდეს აღწევს.
ყველაზე იაფი შემოწმებაა ცვლადის დაბეჭდვა იმ ადგილიდან, სადაც ვარდება და არა იმ ჭურვიდან, რომელიც მუშაობს. თუ წარუმატებელი პროცესი გვირაბამდე დაიწყო, ექსპორტს შანსი არ ჰქონია.
ბრძანებაზე დაფუძნებული ფორმა, ჩამოწერილი
პრეფიქსი არჩევანს თვალსაჩინოს ტოვებს იმ ბრძანებაში, რომელიც მას იყენებს, რაც გვეხმარება, როცა საბოლოო წერტილი ამოცანებს შორის იცვლება:
env INTERNAL_API='https://internal-api.example.net:8443' my-work-tool
ბრძანება მხოლოდ საილუსტრაციოა: my-work-tool ადგილის შემავსებელია და INTERNAL_API VPN სტანდარტი არ არის, ამიტომ ჩასვით პროგრამის დოკუმენტირებული პარამეტრი, რომელსაც ნამდვილად ამუშავებთ, და თქვენი დამტკიცებული ჰოსტი. ნუ ჩასვამთ ნიშანს ან პაროლს იმავე სტრიქონში, რადგან ის ჭურვის ისტორიაში ხვდება.
როცა რამდენიმე ბრძანება ერთ ამოცანას ეკუთვნის, მოკლე გადამოწმებული შემოხვევის სკრიპტი აყენებს ცვლადებს და შემდეგ უშვებს მათ. ეს ინახავს ერთ განსაზღვრებას და მნიშვნელობას ტერმინალის ყველა მომავალი ბრძანებისთვის გლობალურად არ აქცევს.
თავიდან ჩატვირთეთ, გადატვირთეთ ან ისე დატოვეთ
უკვე მომუშავე ინსტრუმენტისთვის უპირატესობა მიანიჭეთ მისივე გადატვირთვას ან სამუშაო სივრცის პროფილს, თუ აქვს. წინააღმდეგ შემთხვევაში შეინახეთ სამუშაო და გადატვირთეთ კომპონენტი, რომელიც პარამეტრს კითხულობს, და ეს ხშირად ენის სერვერია და არა რედაქტორის ფანჯარა. ფანჯრის გადატვირთვა და იმის ვარაუდი, რომ შვილ პროცესებმა მას გაჰყვეს, სწორედ ის არის, რის გამოც გადატვირთვა ისე ჩანს, თითქოს არ მუშაობს.
გაწყვეტა ცალკე გადაწყვეტილებაა. პაუზა, დახურვა ან ხელახლა დაკავშირება აპლიკაციას ეკუთვნის, და საბოლოო წერტილის ცვლადი ამას არ აკონტროლებს. მოეპყარით ცვლადს როგორც კონფიგურაციას, რომელიც მისამართს ირჩევს და არა როგორც წესს იმის შესახებ, თუ რა ქსელური ტრაფიკის გამოყენება შეიძლება შემდეგ, და ორივე საკითხი განცალკევებადი რჩება.