বর্তমান ডিরেক্টরি মেকফাইলে পরিবর্তন হয় না কেন?


14

আমি একটি সাধারণ cdস্ক্রিপ্ট চালানোর চেষ্টা করছি- একটি গিটার সংগ্রহস্থলকে একটি নির্দিষ্ট ডিরেক্টরিতে ক্লোন করতে , তারপরে একটি ইনস্টলেশন স্ক্রিপ্ট চালানোর জন্য এই ডিরেক্টরিতে।

এই স্ক্রিপ্টটি একটি মেকফাইলে রয়েছে।

তবে cdমনে হচ্ছে কাজ হচ্ছে না। এটি আমার ইনস্টলেশন স্ক্রিপ্টটি খুঁজে পায় না।

আমি cdস্ক্রিপ্টের পরে পিডাব্লুডিকে যুক্ত করেছি এবং এটি আমাকে ডিরেক্টরিটি যেখানে আমি স্ক্রিপ্টটি চালাচ্ছি সেগুলি দেখায়, আমি যে ডিরেক্টরিটিতে cdপ্রবেশ করি তা নয়।

সমস্যা কি?

git clone http://somerepo ~/some_dir
cd ~/some_dir/
pwd
python myscript.py install

=>

pwd: /hereIsPathToDirectoryFromWhichIRunTheScript

অজগর: ফাইল 'সেটআপ.পি' খুলতে পারে না: [ত্রুটি 2] এরকম কোনও ফাইল বা ডিরেক্টরি নেই

এটি সঙ্গে কাজ করে না ./setup.py

আমি যদি পরম পথে প্রবেশ করি ~/some_dir/setup.pyতবে স্ক্রিপ্টটি পরে ব্যর্থ হয় কারণ এটি একই ফোল্ডারে সংস্থানগুলি অ্যাক্সেস করার চেষ্টা করছে।


আপনি কি এর মতো কিছু চেষ্টা করতে পারেন: "ওরফে মাইসিডি = 'সিডি কিছু_ডির'; মাইসিডি"
আল্পার্ট

এটি কাজ করে না:/bin/sh: mycd: command not found
আইএক্সএক্স

আমি সমাধানটি পেয়েছি: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 1789594/… এ একটি যুক্ত করতে হয়েছিল; সিডি পরে এবং তারপর একই লাইনে স্ক্রিপ্ট চালানো।
আইএক্সএক্স

উত্তর:


36

আপনি একটি মেকফাইল ব্যবহার করছেন। মেকফিলগুলি স্ক্রিপ্ট নয়, প্রতিটি লাইন একটি নতুন শেলের মধ্যে কার্যকর করা হয়। অর্থ যখন আপনি পরিবেশটিকে লাইনে পরিবর্তন করেন (যেমন cd) তখন সেই পরিবর্তনটি পরবর্তী লাইনে প্রচার করা হয় না।

সমাধানটি হ'ল যখন আপনি কমান্ডগুলির মধ্যে পরিবেশ সংরক্ষণ করতে চান, আপনি সমস্ত কমান্ড একই লাইনে চালাবেন। সমস্ত কমান্ডগুলি একই শেলের মধ্যে কার্যকর করা হবে এবং পরিবেশ সংরক্ষণ করা হবে।

উদাহরণ স্বরূপ:

target:
    git clone http://somerepo ~/some_dir
    cd ~/some_dir/ && python myscript.py install

একটি আপডেট উত্তরের জন্য এই পোস্টটি দেখুন ।
mloning

0

একটি স্ক্রিপ্ট একটি চালানো হয় subshell , যার মানে এটা নিজস্ব হয়েছে $PWD। এটি বের হয়ে গেলে আপনি "পুরানো" পান $PWD। আপনি যদি এটি রাখতে চান তবে স্ক্রিপ্টটি চালানোর পরিবর্তে এটি (ওরফে ) $PWDদরকার । এটি কোনও মেকফাইলে কাজ করবে না, কারণ, প্রতিটি কমান্ড পৃথক সাব-শেলে চালিত হয়:source.

$ pwd
/home/user
$ cat test.sh
cd /
$ cat Makefile
test:
    . ./test.sh && pwd
    pwd
$ make test
. ./test.sh && pwd
/
pwd
/home/user

আমি সমাধানটি পেয়েছি: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 1789594/… এ একটি যুক্ত করতে হয়েছিল; সিডি পরে এবং তারপর একই লাইনে স্ক্রিপ্ট চালানো।
আইএক্সএক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.