संपादित करें: जिन स्थानों पर मैंने $ HOME / .bin कहा था, मुझे $ HOME / बिन लिखना चाहिए था या कोई समकक्ष ठीक है। IE, कोई भी उपयोगकर्ता-योग्य निर्देशिका जो उपयोगकर्ता के PATH में है।
तो मेरे पास एक bash स्क्रिप्ट है जिसे मैं अपने API के लिए एक क्लाइंट के रूप में वितरित कर रहा हूं। वर्तमान संस्करण इस तरह से स्थापित होता है curl -s http://api.blah.com/install | sudo sh
। मैं छह अलग-अलग पैकेज प्रबंधन प्रणालियों से निपटने की कोशिश कर सकता हूं ताकि वे बस apt-get
या brew install
किसी बिंदु पर हो सकें , लेकिन अब मैं एक-लाइनर के साथ जा रहा हूं क्योंकि मैं चाहता हूं कि यह समाधान कई प्रणालियों के लिए काम करे। हालांकि, जाहिरा तौर पर साइबरविन या मैक जैसे सिस्टम पर काफी कम उपयोगकर्ता हैं, जिनके पास सूडो नहीं हैं या उन्होंने इसे स्थापित नहीं किया है।
परिदृश्य एक उपयोगकर्ता है जो मेरे एपीआई के लिए साइन अप करता है, उनके क्रेडिट कार्ड की जानकारी दर्ज करता है। मेरे पास एपीआई के लिए एक बैश क्लाइंट है जो एक संदर्भ कार्यान्वयन के रूप में दोगुना है और यह भी एक तरीका है कि एपीआई की कोशिश करें या कमांड लाइन का उपयोग करके वीएम और डॉक कंटेनर को तैनात करें। मैं एपीआई क्लाइंट स्थापित करने के लिए उपयोगकर्ताओं के लिए एक आसान तरीका बनाना चाहता हूं।
उदाहरण के लिए, npm के लिए एक-लाइन इंस्टॉल हुआ करता था curl http://npmjs.org/install.sh | sh
। साथ ही होमब्रे में एक-लाइन इंस्टॉलर है ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
(देखें http://brew.sh )।
मेरी स्थापित स्क्रिप्ट बस एपीआई क्लाइंट स्क्रिप्ट को डाउनलोड करती है और इसे / usr / bin में डालती है और इसे निष्पादन योग्य बनाती है। लेकिन मैं सूडो और इस तथ्य के आधार पर सोच रहा हूं कि वास्तव में इसे विश्व स्तर पर स्थापित करने की आवश्यकता नहीं है, मैं इसे उपयोगकर्ता के $ HOME / .bin या $ HOME / लोकल / बिन (इसे बनाने के लिए) में स्थापित करना चाहूंगा। यदि यह कोई मौजूदा समतुल्य नहीं है)।
यह मेरी वर्तमान इंस्टॉल स्क्रिप्ट है:
#!/bin/bash
BASE="https://api.blah.com"
sudo bash -c "curl -s $BASE/mycmd > /usr/bin/mycmd"
sudo chmod uga+x /usr/bin/mycmd
पहली शिकन जो मुझे होती है, वह यह है कि कई उपयोगकर्ता अब zsh में हैं। इसलिए यदि मैं ~ / .bashrc में एक पंक्ति जोड़ या संशोधित करता हूं जो $ HOME / .bin को शामिल करने के लिए PATH को अपडेट करता है, जो उन प्रणालियों के लिए काम नहीं करेगा।
तो इस प्रश्न को शांत करने के लिए, मुझे उस उपयोगकर्ता के PATH ($ HOME / लोकल / बिन, या जो भी PATH में डिफ़ॉल्ट रूप से उपलब्ध है) डायरेक्टरी में अपनी स्क्रिप्ट को डाउनलोड करने और इंस्टॉल करने के लिए किस कोड का उपयोग करना चाहिए। उनके पेट में, आवश्यकता (या कम से कम मजबूत इच्छा) के साथ कि यह लगभग सभी की प्रणाली पर काम करेगा (यदि उनके पास यूनिक्स प्रॉम्प्ट जैसा कुछ है) (बिना सूडो की आवश्यकता के)?
चूँकि कुछ लोग PATH को बुराई करने के लिए संशोधित करने पर विचार करते हैं, मैं डिफ़ॉल्ट $ HOME / उस सिस्टम के लिए कुछ भी / बिन में स्थापित करना चाहूंगा, जो कि उपयोगकर्ता के PATH में पहले से ही है, यदि संभव हो तो, अपने PATH को अपने विशेष रूप से शामिल करने के लिए स्वचालित रूप से संशोधित करने के बजाय निर्देशिका।
बहुत बहुत धन्यवाद!
cat > ./file || cd elsewhere
- कि $PATH
हालांकि पता नहीं है । माफ़ करना। लेकिन getconf
वहां आपकी मदद कर सकता है। यह set -C
भी सुनिश्चित करेगा कि आप किसी भी चीज़ को ओवरराइट न करें।
command
शायद बेहतर हैhash
। वास्तव में, मुझे लगता है कि यह इसके सभी उत्तर देता है। unix.stackexchange.com/a/126854/52934