/ Usr / bin / env के लिए पर्ल लोकेशन कैसे बदलें


1

मैं एक पुराने डेबियन 6 मशीन पर काम कर रहा हूं। यह पर्ल का एक पुराना संस्करण था और यह "टेस्ट :: अधिक संस्करण 0.96 आवश्यक" के साथ कुछ स्वयं परीक्षणों को विफल करने का कारण बन रहा था । मैंने नवीनतम पर्ल 5.22.1 डाउनलोड किया, इसे स्रोतों से बनाया और इसे रखा /opt/perl/

मेरे पास एक स्क्रिप्ट है जो पर्ल का उपयोग करती है, और इसकी प्रस्तावना है:

#!/usr/bin/env perl

हालाँकि, जब मैं स्क्रिप्ट निष्पादित करता हूं, तो यह नए पर्ल के बजाय पुराने पर्ल का उपयोग कर रहा है। इस तरह की उम्मीद है क्योंकि /usr/bin/envपर्ल (या मुझे विश्वास नहीं है कि यह करता है) के बारे में नहीं जानता है।

मैं कैसे बताऊं envकि पर्ल एक में है /opt/perl/या नहीं /usr/bin/? यदि संभव हो, तो मैं इसे मशीन कॉन्फ़िगरेशन (यानी, सभी पर लागू होता है) होना चाहता हूं, और उपयोगकर्ता कॉन्फ़िगरेशन (यानी, मेरे लिए लागू होता है) नहीं।


यहाँ के लिए मैनपेज है env(1)। इसके लिए बहुत कुछ नहीं है, और मुझे विश्वास नहीं है कि यह एक दुभाषिया के लिए एक कार्यक्रम के नए संस्करण को पंजीकृत करने पर चर्चा करता है। env(7)(विविध) या env(8)(प्रशासन) के लिए कोई मैन पेज नहीं हैं ।

ENV(1)                           User Commands                          ENV(1)

NAME
       env - run a program in a modified environment

SYNOPSIS
       env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]

DESCRIPTION
       Set each NAME to VALUE in the environment and run COMMAND.

       -i, --ignore-environment
              start with an empty environment

       -0, --null
              end each output line with 0 byte rather than newline

       -u, --unset=NAME
              remove variable from the environment

       --help display this help and exit

       --version
              output version information and exit

       A mere - implies -i.  If no COMMAND, print the resulting environment.

AUTHOR
       Written by Richard Mlynarik and David MacKenzie.

...

एक अस्थायी उपाय के रूप में आप / या बिन में पर्ल बाइनरी का नाम बदलने की कोशिश कर सकते हैं और यदि यह काम करता है, तो यह देखने के लिए कि यह / के लिए simlink के साथ बदलें।
ओलेग बोल्डेन

जवाबों:


2

शेल की तरह, एक साधारण कमांड नाम के लिए निष्पादन योग्य फ़ाइल खोजने के लिए env उपयोग करता$PATH है। (शेल के विपरीत यह पहले एलियास, फ़ंक्शंस और बिलिंस की कोशिश नहीं करता है।) मेरे पास डेबियन नहीं है, लेकिन मेरे उबंटू 14.04 (जो कि बहुत अलग नहीं होना चाहिए) मानक / पैक perlमें है /usr/bin, और एक परीक्षण उपयोगकर्ता है कोई अनुकूलन के साथ की एक $PATHसेटिंग हो जाता है

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 

प्लस मौजूद होने पर डिफ़ॉल्ट .profileचेक करता $HOME/binहै और यदि ऐसा है तो इसे फ्रंट में जोड़ता है।

/usr/local/*"मेरे सिस्टम के लिए विशिष्ट" ओवरराइड के लिए सटीक रूप से लक्षित है, और ~username/bin"यह उपयोगकर्ता केवल" ओवरराइड करता है, इसलिए उनमें से किसी में भी एक सिमलिंक काम करना चाहिए। वैकल्पिक रूप से आप /opt/perl(या शायद /opt/perl/binअगर यह उस तरह से संरचित है) अपने $PATHपूर्व में डाल सकता है /usr/bin


" /usr/local/\*मेरे सिस्टम के लिए विशिष्ट" के लिए सटीक रूप से इरादा है "ओवरराइड्स ..." - यहाँ समस्या पर्ल को उस निर्देशिका को प्रदूषित करती है जिसे वह छूता है। इसकी एक बात अगर यह एक या दो प्रोग्राम, कुछ लिबास इत्यादि को स्थापित करता है, लेकिन पर्ल इसके द्वारा छपने वाली निर्देशिकाओं पर सभी चीजें छिड़कता है। इसका एक कारण मैं उपयोग नहीं करना चाहता था /usr/local
jww
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.