কোনও প্রোগ্রাম শুরু করার সময় বর্তমান ওয়ার্কিং ডিরেক্টরিটি সেট করার জন্য কি কোনও পসিক্স (বা কমপক্ষে একটি জনপ্রিয়) ইউটিলিটি রয়েছে?


20

আমরা যে কমান্ডটি চালাতে চাই তার পরিবেশ পরিবর্তন করতে env (1) রয়েছে (উদাহরণস্বরূপ env MANPAGER=more man dtrace)। কমান্ডটি শুরু হতে চলেছে সেই ডিরেক্টরিটি সংশোধন করার ছাড়াও কি তেমন কিছু আছে?

আদর্শভাবে, আমি এটি দেখতে দেখতে চাই:

theMagicCommand /new/cwd myProgram

এইভাবে এটি অন্যান্য এনভির সাথে (শৃঙ্খলাবদ্ধ) হতে পারে (1) -র মতো কমান্ড, যেমন,

daemon -p /tmp/pid env VAR=value theMagicCommand /new/cwd myProgram

এখনও অবধি আমি নিম্নলিখিত সমাধানগুলি সম্পর্কে ভাবতে পারি, দুর্ভাগ্যক্রমে এনভি (1) এর মতো ইন্টারফেস নেই :

cd /new/cwd && myProgram

এছাড়াও, আমি ঠিক এটির মতো একটি সাধারণ শেল স্ক্রিপ্ট তৈরি করতে পারি:

#! /bin/sh -
cd "${1:?Missing the new working directory}" || exit 1
shift
exec "${@:?Missing the command to run}"

তবে আমি এমন কিছু সন্ধান করছি যা ইতিমধ্যে বিদ্যমান (কমপক্ষে ম্যাকোএস এবং ফ্রিবিএসডি তে)।

myProgramঅগত্যা কোনও ডেস্কটপ অ্যাপ্লিকেশন নয় (এই ক্ষেত্রে আমি কেবল একটি .ডেস্কটপ ফাইলে পাথ কীটি ব্যবহার করতে পারি )।


6
cd /new/cwd && env VAR=value myProgramআপনার ক্রেতার সাথে দেখা হয় না কেন ?
jpaugh

এটি এমনিতেই প্রশ্নে রয়েছে, যেখানে এম। পাইট্রোস্কি ব্যাখ্যা করেছিলেন যে এটি একই ইন্টারফেস নয় env। তাকান env। তুলনা করুন এটি rtprio, idprio, numactl, jexec, chrt, এবং প্রকৃতপক্ষে toolsets কমান্ড উত্তর উল্লেখ করেছে। একটি প্যাটার্ন রয়েছে, এবং এটি চেইন লোডিং।
জেডিবিপি

3
"ইন্টারফেস" বলতে কী বোঝ? এবং কেন ব্যবহার (cd the/cwd; cmd)করবেন না ?
কনরাড রুদল্ফ

2
@ কনরাডরুডল্ফ উদাহরণস্বরূপ, (cd the/cwd; cmd)sh (1) দিয়ে মোড়ানো না হয়ে আপনি সহজেই env (1) এ যেতে পারবেন না ।
ম্যাটিউজ পাইওটরোস্কি

উত্তর:


19

আফাইক, পসিক্স সরঞ্জাম বুকে তেমন কোনও ডেডিকেটেড ইউটিলিটি নেই। তবে shআপনার shস্ক্রিপ্টে যেমন কমান্ড চালানোর আগে একটি পরিবেশ (সিডব্লিউড, সীমাবদ্ধতা, স্টেডআউট / ইন / এআরআর, উমাস্ক ...) সেট আপ করা সাধারণ ।

তবে আপনাকে সেই স্ক্রিপ্টটি কোনও ফাইলে লিখতে হবে না, আপনি এটি কেবল ইনলাইন করতে পারেন:

sh -c 'CDPATH= cd -P -- "$1" && shift && exec "$@"' sh /some/dir cmd args

(ধরে নেই ডিরেক্টরিটি নয় -)। যুক্ত করা CDPATH=(যদি পরিবেশের মধ্যে একটি থাকে) এবং -Pএটি আরও সোজার মতো আচরণ করার জন্য chdir()

অন্যথা, আপনি ব্যবহার করতে পারে perlযার chdir()সোজা করে chdir()বাক্সের বাইরে।

perl -e 'chdir(shift@ARGV) or die "chdir: $!"; exec @ARGV or die "exec: $!"
         ' /some/dir cmd args

ও আচ্ছা. এটি আমার প্রশ্নে আমি অন্তর্ভুক্ত স্ক্রিপ্টটির খুব সহজ প্রকরণটি সংযুক্ত করে। আমি ভীত ছিলাম যে ইউটিলিটিটি আমি সন্ধান করছি সেটির অস্তিত্ব নেই কারণ এর কার্যকারিতা ইতিমধ্যে অপেক্ষাকৃত সংক্ষিপ্ত sh (1) অনলাইনারের সাথে উপলব্ধ।
ম্যাটিউজ পিয়োত্রস্কি

8
আপনি যদি ইতিমধ্যে চলমান থাকেন তবে আপনি এটি shকরতেও পারেন (cd /wherever && exec /my/command)()পরোক্ষভাবে আবৃত কমান্ড চালানোর জন্য একটি subshell খোলে, এবং অবশ্যই, execদ্রুত হিসাবে হিসাবে অতিরিক্ত শেল প্রক্রিয়া পরিত্রাণ পায় /my/commandচলমান শুরু হয়।
jpaugh

2
এটি এখন মুছে দেওয়া উত্তরে পরামর্শ দেওয়া হয়েছিল। প্রশ্নকর্তা ব্যাখ্যা করেছিলেন যে এটি xe যা চেয়েছিল তার কোনও উত্তর নয়।
জেডিবিপি

15

ডিমনটোলস ওয়ার্ল্ড এবং অন্য কোথাও ব্যবহৃত টুলসেটগুলির এগুলি এবং আরও অনেক কিছু রয়েছে; বহু বছর ধরে আছে; এবং ব্যাপকভাবে উপলব্ধ।

  • ওয়েইন মার্শালের বিড়ম্বনাটি রয়েছে runtool:

    রুটুল-সি / নতুন / সিডব্লিউড মাইপ্রোগ্রাম
  • লরেন্ট বেরকোটের সম্পাদনায় রয়েছে cd:

    সিডি / নতুন / সিডব্লিউড মাই প্রোগ্রাম
  • আমার নশ টুলসেটটিতে রয়েছে chdir:

    chdir / new / cwd myProgram

এগুলি সমস্তই চেইন-লোডিং সরঞ্জাম, ঠিক এই ধরণের চেইনে ব্যবহার করার জন্য ডিজাইন করা। অন্যান্য উদ্দেশ্যে এই সরঞ্জামদণ্ডগুলিতে চেইন-লোডিং সরঞ্জামগুলির বিস্তৃত নির্বাচন রয়েছে।

আরও পড়া


11

একটি জনপ্রিয় প্রোগ্রাম আছে। এটা তোলে বলা হয় ... হোল্ড আপনার চেয়ার সম্মুখের ... ড্রামের আওয়াজ ... env। জিএনইউ সংস্করণ, যেহেতু ভার্সন ৮.২৮ রয়েছে, পসিক্স নয়, এর -Cবিকল্প রয়েছে যা আপনাকে ডিরেক্টরিটি যেমন আপনার প্রয়োজন ঠিক তেমন সেট করতে দেয়:

    NAME এর
           env - একটি পরিবর্তিত পরিবেশে একটি প্রোগ্রাম চালান

    সংক্ষিপ্তসার
           env [বিকল্প] ... [-] [নাম = ভ্যালু] ... [কম্যান্ড [আরজি] ...]

    বর্ণনা
           প্রতিটি NAME পরিবেশে VALUE এ সেট করুন এবং COMMAND চালান।

           সংক্ষিপ্ত বিকল্পগুলির জন্য দীর্ঘ বিকল্পগুলিতে বাধ্যতামূলক যুক্তিগুলি বাধ্যতামূলক।

           -i , --ignore-পরিবেশ
                  একটি খালি পরিবেশ দিয়ে শুরু করুন

           -0 , -নুল
                  নিউলাইন নয়, প্রতিটি আউটপুট লাইনটি NUL দিয়ে শেষ করুন

           -u , --unset = NAME
                  পরিবেশ থেকে পরিবর্তনশীল অপসারণ

           -সি , --chdir = ডিআইআর
                   ওয়ার্কিং ডিরেক্টরিকে ডিআইআরতে পরিবর্তন করুন

           - সহায়তা সাহায্য করুন এবং প্রস্থান করুন

           --version
                  আউটপুট সংস্করণ তথ্য এবং প্রস্থান

           একটি নিছক - বোঝায় -i । যদি কোন কম্যান্ড না হয় তবে ফলস্বরূপ পরিবেশটি মুদ্রণ করুন।


দুর্দান্ত, যদিও এটি ম্যাকোস এবং ফ্রিবিএসডি-তে-অফ-বক্স-উপলভ্য নয়।
ম্যাটিউজ পাইটরোস্কি

1

গিটের মতো কয়েকটি প্রোগ্রামের এর জন্য একটি বিকল্প রয়েছে:

-C <path>

যেন চালান gitশুরু করা হয়েছে <path>পরিবর্তে সাম্প্রতিক কাজ করা সংগ্রহের।

এবং তৈরি কর:

-C dir, --directory=dir

dirমেকফাইলগুলি পড়া বা অন্য কিছু করার আগে ডিরেক্টরিতে পরিবর্তন করুন ।

এবং তার:

-C, --directory=DIR

DIRকোনও ক্রিয়াকলাপ সম্পাদনের আগে পরিবর্তন করুন । এই বিকল্পটি অর্ডার-সংবেদনশীল, অর্থাৎ এটি অনুসরণকারী সমস্ত বিকল্পকে প্রভাবিত করে।


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