ডিরেক্টরি পরিবর্তন না করে যে কোনও জায়গা থেকে প্রোগ্রাম চালান


9

আমি একটি উপনাম তৈরি করতে চাই, যা আমি এক্সপ্লোর পরিচালনা এক্স চালাচ্ছি, আমার বর্তমান ডিরেক্টরিটি পরিবর্তন না করে I আমার এখন যা আছে তা হ'ল:

alias x = "cd /home/path_to_x && ./x"

এটি কাজ করে তবে আমার ডিরেক্টরি পরিবর্তন করে। আমি যা করতে চাই তা হ'ল:

alias x="./home/path_to_x/x

তবে তারপরে আমি এ জাতীয় কোনও ফাইল বা ডিরেক্টরি পাই না। কেউ কি এই জন্য একটি workaround জানেন?


9
মত একটি উপকরণ সেট করুন alias x='/home/path_to_x/x'.আগে ব্যবহার করবেন না /home.(ডট) বর্তমান ডিরেক্টরি বোঝায়।
সৌরাভসি

2
xসেখানে থাকার সময় কি সত্যিই চালানো দরকার /home/path_to_x? অথবা আপনি কোনও নির্দিষ্ট ডিরেক্টরিতে থাকা কোনও প্রোগ্রাম কীভাবে চালাবেন সে সম্পর্কে আপনি কেবল অনিশ্চিত?
আডাইফোন


অনুরূপ আরও একটি প্রশ্ন জিজ্ঞাসা করুনবুন্টু.কোশনস
427818

উত্তর:


13

সিডি করবেন না, এটির পরম পথটি ব্যবহার করে চালান

এই সংস্করণ:

cd /home/path_to_x && ./x

ডিরেক্টরিটিকে একটি নিখুঁত পথে পরিবর্তন করে (আপনি দেখতে পাবেন কীভাবে /home/...রুট ডিরেক্টরিতে শুরু হয়) এবং তারপরে এক্সক্লুটেবলকে আপেক্ষিক পথে চালিত করে ./x(এটি, নতুন ওয়ার্কিং ডিরেক্টরি সম্পর্কিত)।

এই সংস্করণ:

./home/path_to_x/x

আপেক্ষিক পথে এক্সিকিউটেবল চালানোর চেষ্টা করে ./home/path_to_x/x, যার অর্থ বর্তমানে আপনার বর্তমান ওয়ার্কিং ডিরেক্টরি যা আছে তার সাথে আপেক্ষিক । এটি ব্যাখ্যা করে যে আপনি ত্রুটি কেন পান - এই আপেক্ষিক পথটি আসলেই বিদ্যমান নেই।

আপনি যে আদেশটি চান তা হ'ল:

/home/path_to_x/x

আবার পরম পথ ব্যবহার করে (রুট ডিরেক্টরি থেকে শুরু করে /)।

ওহ, এবং আপনি কেবল নিজের নামটি তৈরির পরিবর্তে /home/path_to_xআপনার যুক্ত করতে পারেন PATH। দেখুন: পুরো পাথটি টাইপ না করে স্ক্রিপ্টগুলি কীভাবে চালানো যায়?


এটি উত্থাপিত হিসাবে প্রশ্নের সঠিক উত্তর।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

1
এটি কেবল তখনই ভুল হতে পারে যদি প্রোগ্রামটি নির্দিষ্ট ডিরেক্টরিতে চালিত হয় যা এটি থেকে আসেpwd
কাজ ওল্ফ

@ হোয়াআআআআআউট ঠিক আছে। /home/path_to_x/xকার্যত সমতুল্য নয় (cd /home/path_to_x && ./x); যদি এটি কাজ করে বা না হয় তবে অ্যাপ্লিকেশন নির্ভর।
রোমানো

যদিও আপনি সাধারণভাবে ঠিক রয়েছেন, এই নির্দিষ্ট প্রশ্নের জন্য ওপি দৃশ্যমানভাবে পরম পথ থেকে চালানোর চেষ্টা করছিল (কেবলমাত্র একটি চরিত্রের ভুলের সাথে)। তবে, আমি নিশ্চিত যে এই ক্ষেত্রে কার্যকারী ডিরেক্টরি গুরুত্বপূর্ণ হলে তারা স্পষ্ট করতে পারবেন।
অকেজো

8

আপনি যদি cdউপনাম বিকল্পের পরে এটি আটকে না রাখতে চান তবে (y এর সাথে সাবসেল ব্যবহার করুন ):

alias my_x="(cd /home/path_to_x && ./x)&" 

আপনি এটি দিয়ে পরীক্ষা করতে পারেন

alias test_y="(cd /tmp && sleep 10 ) & "

মনে রাখবেন যে, সমাধান

alias my_y="/home/path_to_x/x" 

ঠিক সমতুল্য নয়। প্রকৃতপক্ষে, যদি মাধ্যমে বলা হয় my_x, xপ্রোগ্রামটি একটি বর্তমান ডিরেক্টরি দিয়ে পরিচালিত হয় /home/path_to_x/, যখন তাকে ডাকা হয় my_y, xএকটি বর্তমান ডিরেক্টরি দিয়ে চালিত হয় যা কমান্ডটি my_yজারি করা হয়েছিল। এটি গুরুত্বপূর্ণ বা কি xকরছে তার উপর নির্ভর করে নাও হতে পারে ।

ওপি সমাধান সম্পর্কে , এটি এতে কাজ করে bash:

romano@RRyS:~$ pwd
/home/romano
romano@RRyS:~$ alias x="cd /bin && ./echo A >/dev/null  &"
romano@RRyS:~$ x
[1] 16611
romano@RRyS:~$ pwd
/home/romano

তবে এতে নেই zsh:

[romano:~] % pwd
/home/romano
[romano:~] % alias x="cd /bin && ./echo A >/dev/null &"
[romano:~] % x
[1] 16744
[1]  + 16744 done       ./echo A > /dev/null                                    
1& [romano:/bin] % pwd
/bin
[romano:/bin] % 

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


1
পেছনের &চেয়ে বেশি অগ্রাধিকার দেওয়া যেমন &&মনে হয় এটি অনন্য হতে পারে zsh। আমি চেষ্টা sleep 5 && echo done &মধ্যে zsh, bash, ksh, mksh, dash, এবং এমনকি এক অ বোর্ন ধাঁচের শেল ( tcsh)। কেবল অগ্রভাগে zshমূল্যায়ন sleep 5করা; অন্য সমস্ত অবিলম্বে ফিরে এসেছিল (তারপরে doneঅবশ্যই পাঁচ সেকেন্ড পরে মুদ্রিত হবে)। অন্যদিকে, যদিও এটি সম্পূর্ণরূপে এক বিশেষত্ব zsh, তবে আমি মনে করি যে স্পষ্ট ( )(বা { ;}) যুক্ত করা যুক্তিসঙ্গত, কারণ এটি অন্য মানুষের (বা নিজের কাছে, পরে স্ক্রিপ্ট বা ইতিহাস পড়ার সময়) অভিপ্রায় দেয়।
এলিয়াহ কাগন

4

আপনি যে ফাইলটি চালাতে চান তা যদি ইতিমধ্যে কার্যকর করা যায় তবে আপনি কেন এটি PATH ভেরিয়েবল যুক্ত করবেন না?

যদি আপনার এক্সিকিউটেবল ফাইলটি /home/user/aplication/appXকেবল প্রবেশ করে

PATH=$PATH:/home/user/application

আপনার ~/.bashrcবা~/.profile

আপনার কনসোলটি পুনরায় চালু করার পরে, আপনি এটিকে সহজভাবে চালাতে পারেন appX

আমি মনে করি এটিই সবচেয়ে পরিষ্কার সমাধান।


3

&শেষে একটি লাগানো কৌশলটি মনে হচ্ছে:

alias x = "cd /home/path_to_x && ./x &"

2
তুমি কি নিশ্চিত? মৃত্যুদন্ড কার্যকর করার পরে xআপনি ভিতরে আছেন /home/path_to_x&শেষে কেবল পটভূমিতে প্রক্রিয়া পাঠান।
রোমানো

2
@ রুমানো এটি আসলে কাজ করে। cdব্যাকগ্রাউন্ড জবসগুলিতে কলারকে প্রভাবিত করে না (যা বোঝায় - তারা যদি তা করে তবে তা সত্যই অদ্ভুত হবে)। এটি কারণ অ্যাসিঙ্ক্রোনাস এক্সিকিউশন একটি সাব-শেল ব্যবহার করে । যদিও এটি আরও ভাল হবে যদি এটি ব্যাখ্যা করে যে এটি কেন কাজ করে এবং কী &করে - এবং পটভূমিতে কীভাবে দৌড়ানো কখনও কখনও অনাকাঙ্ক্ষিত হয় - এটি (ইতিমধ্যে) একটি সঠিক উত্তর। ( আপনার পরামর্শ অনুসারে বাক্যবিন্যাসের সাথে স্পষ্টভাবে একটি সাবশেল তৈরি করা( ) বেশিরভাগ সময় সম্ভবত আরও ভাল সমাধান))
এলিয়াহ কাগন

@ এলিয়াকাগান আপনি ঠিক বলেছেন আমি সমাধানটির সাথে সমাধানটি পরীক্ষা করেছিলাম zshএবং কার্যকরভাবে এটি কাজ করে bashএবং না এর মধ্যে হয় zsh... এলিয়াসগুলি কীভাবে প্রসারিত করা যায় তার মধ্যে কিছুটা পার্থক্য থাকতে হবে।
রোমানো

একটি প্রশ্ন জিজ্ঞাসা করা হয়েছে: unix.stackexchange.com/questions/162286/…
রুমানো

@Rmano আপনাকে সংক্রান্ত সেটিংস সক্ষম করেনি pushdমধ্যে zsh(আমি আছে setopt autopushd pushdsilent pushdtohome, এবং এটি আমার cwd মনে করতে পারে।)
muru

0

আপনার বর্তমান পিডাব্লুডির ব্যাকআপ পান এবং আপনার কমান্ড চালানোর পরে, আপনার শেষ পিডাব্লুডিকে পূর্বাবস্থায় ফেরান।

alias x='dwp=$(pwd) && cd /home/path_to_x && ./x && cd $dwp'

আপনি সেই রুমানো ওরফেটির প্রভাবটি ভুল বুঝেছিলেন। কমান্ড লাইনটি অবরুদ্ধ করা হয়নি। এটি ঠিক যে ওরফে আউটপুট ( test) কার্সারটিকে পরবর্তী লাইনে ঠেলে দিয়েছে। আপনি সেখানে যা চান তা এখনও করতে পারেন (একটি নতুন নতুন প্রম্পট খোলার জন্য এন্টার চাপ দিয়ে)।
مورু

হ্যাঁ, ঠিক আছে @ মিউর: |
нιηসнιη

নোট করুন যেহেতু আপনি ডাবল কোট ব্যবহার করেন ভেরিয়েবলের বর্তমান ডিরেক্টরিটি অন্তর্ভুক্ত থাকবে যখন উলামের সংজ্ঞা দেওয়া হয়েছিল । উপন্যাসটি প্রসারিত না হওয়া পর্যন্ত মূল্যায়ন স্থগিত করতে একক উদ্ধৃতি ব্যবহার করুন। তবে, pushdএবং popdআপনার উত্তরটি যা করে তা করুন do alias x='pushd /home/path_to_x && ./x && popd'
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.