मछली के लिए '~ / .profile` का फिर से उपयोग करें?


34

(मैं शेल फिश , esp। फिश फिश के बारे में बात कर रहा हूं ।)

बैश / ZSH के लिए, मेरे पास ~/.profileकुछ निर्यात, उपनाम और अन्य सामान थे।

मैं मछली के लिए पर्यावरण चर के लिए एक अलग विन्यास नहीं करना चाहता, मैं फिर से उपयोग करना चाहता हूं ~/.profile। कैसे?

द एफएक्यू में, यह कहा गया है कि मैं कम से कम उन के माध्यम से आयात कर सकता हूं /usr/local/share/fish/tools/import_bash_settings.py, हालांकि मुझे वास्तव में प्रत्येक मछली-उदाहरण के लिए दौड़ना पसंद नहीं है।

जवाबों:


26

आप बैश का उपयोग पार्स / आदि / प्रोफाइल और ~ / .profile के लिए कर सकते हैं, और फिर मछली शुरू कर सकते हैं।

  1. /usr/local/bin/fishloginसामग्री के साथ बनाएँ

    #!/bin/bash -l
    exec -l fish "$@"
    
  2. इसे अमल में लाएं

    sudo chmod +x /usr/local/bin/fishlogin
    
  3. इसे / etc / गोले में जोड़ें

    echo /usr/local/bin/fishlogin | sudo tee -a /etc/shells
    
  4. इसे अपने डिफ़ॉल्ट शेल के रूप में सेट करें

    sudo usermod -s /usr/local/bin/fishlogin $USER
    

कितने शालीन! स्वीकार किया जाना चाहिए जवाब IMO
yonix

2
बस किसी को भी आश्चर्य हो रहा है, मैक के बराबर usermod -s /usr/local/bin/fishlogin $USERहैchsh -s /usr/local/fishlogin $USER
gloriphobia

1
यदि आपको chsh: /usr/local/bin/fishlogin: non-standard shellइसे जोड़ने की आवश्यकता है/etc/shells
बेन मार्टन

1
सीधे लॉन्चिंग मछली की पूरी तरह से नकल करने के लिए, के fish "$@"साथ प्रतिस्थापित किया जाना चाहिए exec -l fish "$@"execमछली के साथ बैश प्रक्रिया को प्रतिस्थापित करता है, जबकि इसका -lकारण यह है कि argv[0]मछली के लिए -fish, जो संकेत देता है कि यह एक लॉगिन शेल है।
jrmnn

1
@Sz। ठीक है, नहीं। मछली पहले स्थान पर उपसमूह का समर्थन नहीं करती है। और अगर ऐसा हुआ भी, तो वह आपके लॉगिन शेल को निष्पादित करके ऐसा नहीं करेगा, इसलिए कोई भी बैश नहीं होगा।
नोए रुबिनस्टीन

15

मेरा वर्तमान समाधान ( शायद अधिक हाल के संस्करण के लिए यहां देखें ):

egrep "^export " ~/.profile | while read e
    set var (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)\$/\1/")
    set value (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)\$/\2/")

    # remove surrounding quotes if existing
    set value (echo $value | sed -E "s/^\"(.*)\"\$/\1/")

    if test $var = "PATH"
        # replace ":" by spaces. this is how PATH looks for Fish
        set value (echo $value | sed -E "s/:/ /g")

        # use eval because we need to expand the value
        eval set -xg $var $value

        continue
    end

    # evaluate variables. we can use eval because we most likely just used "$var"
    set value (eval echo $value)

    set -xg $var $value
end

3
क्या आप बता सकते हैं कि यह क्या करता है?
अधिकतम प्लीनर

@maxpleaner AFAICT के माध्यम से यह दिखता है। निर्यात बयानों के लिए लाभकारी है और उन्हें मछली सेट के रूप में निष्पादित करता है। यह थोड़े हैसी है, लेकिन चतुर है।
जारेड स्मिथ

12

अधिक क्लीनर समाधान के लिए, आप विदेशी एनवी प्लगइन का उपयोग कर सकते हैं :

fenv source ~/.profile

5
यह स्वीकृत समाधान होना चाहिए। आप विस्तृत कर सकते हैं (omf स्थापित करें)
जूल्स रैंडोल्फ

ओह मेरी मछली की स्थापना @JulesRandolph की आवश्यकता नहीं है। विदेशी_नव मछली प्लगइन अकेले स्थापित किया जा सकता है, इसमें निर्भरता नहीं है।
डोमिनीकस मोस्टस्किस

5

आप मछली में बैश कमांड निष्पादित करने के लिए बास , एक प्लगइन का उपयोग कर सकते हैं ।

  1. बास स्थापित करें

    $ git clone https://github.com/edc/bass.git
    $ cd bass
    $ make install
    
  2. और फिर, इसे अपने में रखें config.fish:

    bass source ~/.profile
    

यह बहुत बढ़िया है धन्यवाद
ggnoredo

यदि आप इस पद्धति का उपयोग करने जा रहे हैं, तो सुनिश्चित करें कि यह बहुत धीमा नहीं है। मैंने व्यक्तिगत रूप से यह देखना शुरू कर दिया है कि मेरे शेल स्टार्टअप विलंब को लंबे समय से परेशान किया गया था, और इसे नीचे बास पर ट्रैक किया।
mk12

@ mk12 शायद यह बास की गलती नहीं है, यह आपका है .profileजो बहुत ज्यादा चल रहा है।
rsalmei

@rsalmei सब मैं वहाँ था पर्यावरण चर और अन्य परिभाषाएँ, अगर कुछ बयानों के साथ। यह बैश में ध्यान देने योग्य देरी का कारण बनता है। इसलिए मुझे लगता है कि यह बास की गलती है। दूसरी ओर, मैं fenv प्लगइन के साथ बहुत खुश हूँ । यह पायथन के बजाय शेल में लिखा गया है और मेरे लिए बहुत तेज़ लगता है।
mk12 18

हाँ @ mk12, यह अच्छा लगता है, लेकिन यह भी अधिक सीमित है, क्योंकि यह केवल पर्यावरण चर को कैप्चर करता है। bassदूसरी ओर किसी भी बैश शेल स्क्रिप्ट की व्याख्या करते हैं, और उन्हें मछली में चलाते हैं। यह निश्चित रूप से थोड़ा अधिक उपरि होगा, लेकिन मेरे अनुभव में पूरी तरह से नगण्य है, लेकिन आपका लाभ भिन्न हो सकता है।
rsalmei

4

मैंने फिश स्टार्टअप पर सोर्सिंग की कोशिश की। यह मेरे लिए एक आकर्षण की तरह काम करता है।

बस करो :

echo 'source ~/.profile;clear;' >  ~/.config/fish/config.fish

टर्मिनल या iterm2 को पुनरारंभ करें, परीक्षण करने के लिए एक उपनाम .profileका परीक्षण करें।

नोट: अधिक जटिल .profile फ़ाइलों के साथ काम नहीं करेंगे जो सिंटैक्स का उपयोग मछली में उपलब्ध नहीं हैं - क्रेडिट @erb


मेरे लिए भी काम किया! MacOSX चल रहा है।
एलेक्सर

अधिक जटिल .profileफ़ाइलों के साथ काम नहीं करेंगे जो सिंटैक्स का उपयोग करते हैं जो मछली में उपलब्ध नहीं हैं।
एरब

1
@ मैं आपसे सहमत हूँ, मैंने जवाब में कहावत को जोड़ा।
इस्वर राजेश पिनपाल 22

3

स्थापित करें dashऔर इस लाइन को अपने में जोड़ें config.fish:

env -i HOME=$HOME dash -l -c 'export -p' | sed -e "/PATH/s/'//g;/PATH/s/:/ /g;s/=/ /;s/^export/set -x/" | source

शायद स्थापित करने की भी जरूरत नहीं है dash- बस shकरेंगे (जो कि शायद पानी का छींटा है)
वेन वर्नर

1

आप नहीं कर सकते। fishसिंटेक्स बॉर्न शेल ( /bin/sh) सिंटैक्स से बहुत अलग है । यही कारण है कि आप .profileअन्य गैर-बॉर्न-व्युत्पन्न गोले, जैसे cshऔर के साथ उपयोग नहीं कर सकते tcsh


मैं पूरी तरह से निष्पादित नहीं करना चाहता .profile। मैं बस exportवहां से सभी प्राप्त करना चाहता हूं । एक आसान तरीका होगा, egrep "^export"जो मेरे लिए पहले से काफी अच्छा होगा। एक अन्य, अधिक सही समाधान होगा इस । इसके अलावा, मैं उदाहरण के लिए इस import_bash_settings.pyस्क्रिप्ट को चला सकता हूं जो संभवतः कुछ इसी तरह का काम करता है। तो, स्पष्ट रूप से ऐसा करने के कई तरीके हैं। यहाँ मेरे सवाल के साथ, मैं सोच रहा था कि दूसरों ने इसे कैसे हल किया है।
अल्बर्ट

1

यदि आपका वितरण PAM का उपयोग करता है , तो आप अपनी ~/.pam_environmentफ़ाइल में अपने पर्यावरण चर सेट कर सकते हैं ।


1

आप मछली को बैश से शुरू कर सकते हैं। यदि आप ऐसा करते हैं, तो फिश export FOO=barबैश से सभी पर्यावरण चर ( ) प्राप्त कर लेगी । इस बिंदु पर, बैश आपके .profile(या जैसे) पहले से ही पढ़ा होगा ।

bash-3.2$ export TEST="test"
bash-3.2$ fish
cmey@MBP ~> echo $TEST
test
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.