Makefile env ফাইল অন্তর্ভুক্ত


26

আমি কিছু এনভ ভার্সকে মেকফাইলে অন্তর্ভুক্ত করার চেষ্টা করছি। Env ফাইলটি দেখতে দেখতে:

FOO=bar
BAZ=quux

নোট করুন exportপ্রতিটি এনভ ভার্ভের জন্য কোনও নেতৃস্থানীয় নেই । যদি আমি মেকফাইলে শীর্ষস্থানীয় exportএবং কেবল includeএনভিলি ফাইলটি যুক্ত করি তবে সমস্ত কিছু যেমনটি করা উচিত তেমন কাজ করে। তবে আমি env ভার্সন সানকে এগিয়ে রাখতে হবে export। এটি আমাকে কেবল include envfileমেকফাইলে ব্যবহার করতে বাধা দেয় ।

আমিও এরকম কিছু করার চেষ্টা করেছি:

sed '/^#/!s/^/export /' envfile > $(BUILDDIR)/env
include $(BUILDDIR)/env

কিন্তু সেই কারণটি করা একটি ত্রুটি ছুঁড়ে ফেলতে পারে কারণ এনভীভ ফাইলটি অন্তর্ভুক্ত করার জন্য সেখানে নেই।


1
ইউনিক্স ও লিনাক্সে আপনাকে স্বাগতম। আপনার স্পষ্ট প্রশ্নটি দয়া করে বিবরণ করুন। আপনি ঠিক করার চেষ্টা করছেন এটি ঠিক কী?
darnir

1
আমি এমন একটি ফাইল অন্তর্ভুক্ত করার চেষ্টা করছি যাতে পরিবেশ পরিবর্তনশীল জোড়গুলি একটি মেকফিলের সাথে অন্তর্ভুক্ত করা যায় যাতে সেগুলি পরিবেশ তৈরি করতে পারে যেখানে মেক চলছে।
মাইকেল

উত্তর:


40

আপনি যদি gnu make ব্যবহার করছেন তবে envfileফাইলটি অন্তর্ভুক্ত করার জন্য কী কাজ করা উচিত , তারপরে একই ফাইল থেকে প্রাপ্ত ওয়ার্সের তালিকাটি এক্সপোর্ট করুন:

#!make
include envfile
export $(shell sed 's/=.*//' envfile)

test:
        env

7
এই উত্তরের জন্য ধন্যবাদ, এটি উজ্জ্বল! যদিও আমার সংস্করণটি export $(shell...লাইন ছাড়াই কাজ করে । আমার শুধু includeলাইন দরকার
ডাফজে

32

আমারও একই সমস্যা ছিল এবং এই সুতোয় অবতরণ করেছি। আর একটি সম্ভাব্য সমাধান হ'ল মেক এক্সপোর্ট কমান্ডটি কোনও যুক্তি ছাড়াই করা:

include .env
export

এটি পরিবেশের ভেরিয়েবল হিসাবে সমস্ত তৈরি ভেরিয়েবলগুলি রফতানি করবে। এই আচরণটি সমস্ত ব্যবহারের ক্ষেত্রে মেলে বা নাও মিলতে পারে তবে এটি আমার পক্ষে কাজ করে এবং কোনও শেল স্ক্রিপ্টিং উইজার্ড্রি জড়িত না।


3

বিদ্যমান বিদ্যমান এনভি ভার্সন সংরক্ষণ করে

export $(shell [ ! -n "$(ENVFILE)" ] || cat $(ENVFILE) | grep -v \
    --perl-regexp '^('$$(env | sed 's/=.*//'g | tr '\n' '|')')\=')

test:
    echo $$FOO

চালানোর জন্য

make ENVFILE=envfile test # bar

export FOO=foo
make ENVFILE=envfile test # foo

3

এখানে একটি মার্জিত সমাধান রয়েছে যা মেক ভারগুলি আমদানি করে না, তবে শেল সাবপ্রসেসিসের জন্য কোনও পরিবেশ রফতানি সেট করে। ব্যক্তিগতভাবে আমি আমার প্রোফাইলগুলি গতিশীল স্ক্রিপ্টগুলিতে রাখতে পছন্দ করি।

export BASH_ENV=tools/sh/env.sh

কিছু গোটচাস আছে। দুর্ভাগ্যক্রমে ENV কাজ করে না, আমি মনে করি এটি করা উচিত (তবে এটি বাশের একটি সমস্যা, মেকের নয়)। এছাড়াও এটির জন্য সত্যই অন্য একটি লাইন প্রয়োজন, কারণ মেকের ডিফল্ট শেল ইন্টারপ্রেটার হ'ল / বিন / শ।

BASH_ENV := tools/sh/env.sh
SHELL := /usr/bin/bash

উপরের দিকে এটি মেকফিল স্ক্রিপ্টগুলিতে শেল ফাংশনগুলি অন্তর্ভুক্ত করার অনুমতি দেয় তবে কেবল রেসিপি স্ক্রিপ্টগুলির জন্য। আমি জানি না বাশ ভাড়া ছাড়াও অন্যান্য শেল কীভাবে। এবং আরও কিছু চলছে। আমি কিছু টেস্টফাইলে জিআইএসটি হিসাবে রেখেছি

কল্পনাযোগ্য প্রচুর জটিল শেল স্ক্রিপ্ট রয়েছে। আমি সহজ উত্তর জন্য এই প্রশ্ন / একটি সেরা।


2

যদি আপনার ফাইলের নাম হয় .makercতবে আপনি এটিকে মেকফাইলে এটিকে সহজ হিসাবে অন্তর্ভুক্ত করতে পারেন:

include .makerc

আমি কোনও সতর্কতা দমন করতে -আগে সাইন যুক্ত করতে পছন্দ করি include

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.