দীর্ঘ পথের জন্য কীভাবে একটি "উপনাম" তৈরি করবেন?


95

শেল স্ক্রিপ্টিংয়ের সময় আমি যে পথটি প্রায়শই ব্যবহার করি তার জন্য আমি একটি "উপনাম" তৈরি করার চেষ্টা করেছি। আমি কিছু চেষ্টা করেছি, কিন্তু এটি ব্যর্থ হয়েছে:

myFold="~/Files/Scripts/Main"
cd myFold

bash: cd: myFold: No such file or directory

আমি কীভাবে এটি কাজ করব?
তবে, cd ~/Files/Scripts/Mainকাজ করে।

উত্তর:


120

যেহেতু এটি পরিবেশের পরিবর্তনশীল (ওরফে আলাদা আলাদা সংজ্ঞা রয়েছে bash), আপনাকে এ জাতীয় কিছু দিয়ে মূল্যায়ন করতে হবে:

cd "${myFold}"

বা:

cp "${myFold}/someFile" /somewhere/else

তবে আমি আসলে এটিকে আরও সহজ মনে করি, যদি আপনি কেবল সেই ডিরেক্টরিতে স্যুইচ করার সহজতা চান, একটি আসল উপন্যাস তৈরি করতে ( bashযেমন একটি প্রারম্ভিক ফাইলগুলির মধ্যে একটি .bashrc), যাতে আমি কীস্ট্রোকগুলি সংরক্ষণ করতে পারি:

alias myfold='cd ~/Files/Scripts/Main'

তারপরে আপনি কেবল (বাদে cd) ব্যবহার করতে পারেন :

myfold

সংজ্ঞা থেকে মুক্তি পেতে, আপনি ব্যবহার করুন unalias। নিম্নলিখিত প্রতিলিপি শো সব ক্রিয়াটি এই:

pax> cd ; pwd ; ls -ald footy
/home/pax
drwxr-xr-x 2 pax pax 4096 Jul 28 11:00 footy

pax> footydir=/home/pax/footy ; cd "$footydir" ; pwd
/home/pax/footy

pax> cd ; pwd
/home/pax

pax> alias footy='cd /home/pax/footy' ; footy ; pwd
/home/pax/footy

pax> unalias footy ; footy
bash: footy: command not found

ধন্যবাদ ওই কাজগুলো. আমি কেবল ওরফে মাইফোল্ড = '~ / কিছু / পথ' এবং সিডি মাইফোল্ড চেষ্টা করেছি। আমি একটি ত্রুটি পেয়েছি - এরকম কোনও ডিরেক্টরি নেই। কেন? এছাড়াও, একটি উপাধ ভেরিয়েবল "আন-এসাইন্ট" করা কি সম্ভব?
বাশবয়

মাইফোল্ড = '~ / কিছু / পথ' সিডি "$ মাইফোল্ড" ব্যর্থ। কেন?
বাশবয়

4
@ বাশবয়, সম্ভবত এই নামটি নিয়ে আপনার কোনও ডিরেক্টরি নেই। some / কিছু / পাথ একটি উদাহরণ ছিল, আপনার ব্যবহার করতে চান এমন আসল পথটি আপনার পরিবর্তিত করা উচিত । আমি এটি আপনার উদাহরণ ডিরেক্টরিটি ব্যবহার করতে এটি পরিবর্তন করব যাতে এটি পরিষ্কার হয়। কীভাবে কোনও উপনামকে অনাসাইন করা যায়, আপনি আনালিয়াস কমান্ডটি ব্যবহার করেন। আমি এই আদেশটি ব্যবহার সহ একটি প্রতিলিপি সহ উত্তরও আপডেট করেছি।
প্যাক্সডিয়াবলো

আপনি বিভিন্ন টার্মিনাল অধিবেশনগুলিতে এই উপনামটি কীভাবে সংরক্ষণ করবেন? যখন আমি একটি নতুন ট্যাব খুলি এবং এই উপনামটি ব্যবহার করার চেষ্টা করি, এটি কার্যকর হয় না।
25:55

4
@ গোল্ডিসফাইন, আমার প্রথমসূত্র দেখুন in one of the bash startup files like .bashrc। উপসর্গটিকে উপযুক্ত স্টার্টআপ ফাইলে রাখলে তা নিশ্চিত হবে যে এটি সমস্ত সেশনের জন্য উপলব্ধ ।
প্যাক্সিডিয়াবলো

74

একটি শেল বিকল্প রয়েছে cdable_vars:

cdable_vars
যদি এটি সেট করা থাকে তবে cdবিল্টিন কমান্ডের একটি আর্গুমেন্ট যা ডিরেক্টরি নয় এটি একটি ভেরিয়েবলের নাম বলে ধরে নেওয়া হয় যার মানটি ডিরেক্টরিতে পরিবর্তিত হয়।

আপনি এটি আপনার যুক্ত করতে পারেন .bashrc:

shopt -s cdable_vars
export myFold=$HOME/Files/Scripts/Main

লক্ষ্য করুন যে আমি টিলডটি প্রতিস্থাপন করেছি $HOME; কোটগুলি টিলডির প্রসারণ রোধ করে এবং বাশ অভিযোগ করবে যে কোনও ডিরেক্টরি নেই ~/Files/Scripts/Main

এখন আপনি নিম্নলিখিত হিসাবে এটি ব্যবহার করতে পারেন:

cd myFold

কোন $প্রয়োজন নেই । এটি সম্পূর্ণ পয়েন্ট, আসলে - যেমন অন্যান্য উত্তরে দেখানো হয়েছে, cd "$myFold"শেল বিকল্প ছাড়াই কাজ করে। cd myFoldএছাড়াও যদি myFoldপথটিতে ফাঁকা স্থান থাকে, কোনও উদ্ধৃতি আবশ্যক নয় works

এটি এমনকি যদি সেট করা থাকে তবে চেকগুলিতে _cdফাংশন হিসাবে ট্যাব স্বতঃপূরণের সাথেও কাজ করে - তবে প্রতিটি বাস্তবায়ন একই পদ্ধতিতে এটি করে না, তাই আপনাকে নিজের (অথবা শেল বিকল্পটি সেট করার জন্য সম্পাদনা ) আবার উত্স করতে হতে পারে ।bash_completioncdable_varsbash_completion.bashrc/etc/profile


অন্যান্য শেলগুলিতে অনুরূপ বিকল্প রয়েছে, উদাহরণস্বরূপ Zsh ( cdablevars)।


4
জেডএসএইচের পক্ষে এর সমতুল্য কি আছে?
রায়ান স্টুল

4
@ রায়ানস্টুল setopt cdablevarsদেখে মনে হচ্ছে এটি হতে পারে তবে আমি zsh মোটেও জানি না।
বেনিয়ামিন ডাব্লু।

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

4
এমন দুর্দান্ত উত্তর! জন্য আপনাকে অনেক ধন্যবাদcdable_vars
লুকাস পি

4
@ ভ্লাদিস্লাভ লক্ষ করুন যে এটি cdবাশ-সমাপ্তির দ্বারা প্রদত্ত সম্পূর্ণরূপে বিরতি দেয় যা _cdফাংশন ( complete -o nospace -F _cd cd) ব্যবহার করে । এতে যোগ -vকরা (ভেরিয়েবলগুলিতে সম্পূর্ণ করতে) কাজ করে তবে অনাকাঙ্ক্ষিত পার্শ্ব প্রতিক্রিয়া থাকতে পারে - আমার জন্য, আমি যখন ট্যাবটি সম্পূর্ণ করি তখন এটি আমার সম্পূর্ণ পরিবেশটি দেখায়।
বেনজামিন ডাব্লু।

10

লিঙ্কগুলি ব্যবহার করা ভাল

সফট লিঙ্ক

সিম্বলিক বা সফট লিঙ্ক (ফাইল বা ডিরেক্টরি, আরও নমনীয় এবং স্ব ডকুমেন্টিং)

#      Source                            Link
ln -s /home/jake/doc/test/2000/something /home/jake/xxx

হার্ড লিঙ্ক

হার্ড লিঙ্ক (কেবলমাত্র ফাইল, কম নমনীয় এবং স্ব ডকুমেন্টিং নয়)

#    Source                            Link
ln /home/jake/doc/test/2000/something /home/jake/xxx

কিভাবে একটি ডিরেক্টরি একটি লিঙ্ক তৈরি করতে

ইঙ্গিত : আপনার বাড়িতে লিঙ্কটি দেখার দরকার না হলে আপনি এটি বিন্দুর সাহায্যে শুরু করতে পারেন। ; তারপরে এটি ডিফল্টরূপে লুকানো থাকবে তবে আপনি এটির মতো অ্যাক্সেস করতে পারবেন

cd ~/.myHiddelLongDirLink

9

আপনি আপনার ব্যাশের হ্যাশটেবলে যে কোনও পাথ চান তা যুক্ত করতে পারেন:

hash -d <CustomName>=<RealPath>

এখন আপনি সক্ষম হবেন cd ~<CustomName>। এটিকে স্থায়ী করতে আপনার বাশার্ক স্ক্রিপ্টে যুক্ত করুন।

লক্ষ্য করুন যে, এই hashtable ব্যাশ জন্য একটি ক্যাশ প্রদান বোঝানো হয় কন্টেন্ট সব কমান্ড এক্সিকিউট করা হয়, অতএব এই টেবিল ঘটনা ক্যাশে বাতিল, যেমন পরিবর্তন সাফ করা হবে জন্য অনুসন্ধান করতে প্রয়োজন না $PATH


4
আমি মনে করি এটি কেবলমাত্র কাজ করবে zshতবে এতে না bash
সার্জেজ

এটি সেরা উত্তর আইএমএইচও, তবে এটি সত্য যে এটি zshকেবলমাত্র আমার উবুন্টু সিস্টেমে কাজ করে।
জন স্টুয়ার্ট

6

প্রথমে আপনাকে উদ্ধৃতিগুলি সরিয়ে ফেলতে হবে:

bashboy@host:~$ myFolder=~/Files/Scripts/Main

উদ্ধৃতিগুলি শেলটি টিলডিকে আপনার $HOMEডিরেক্টরি হওয়ার বিশেষ অর্থ পর্যন্ত প্রসারিত করা থেকে বিরত রাখে ।

তারপরে আপনি $myFolderএকটি পরিবেশ শেল ভেরিয়েবল ব্যবহার করতে পারেন :

bashboy@host:~$ cd $myFolder
bashboy@host:~/Files/Scripts/Main$

একটি উপনাম তৈরি করার জন্য , আপনাকে উপনামটি সংজ্ঞায়িত করতে হবে:

alias myfolder="cd $myFolder"

তারপরে আপনি এই জাতীয় আদেশের মতো আচরণ করতে পারেন:

bashboy@host:~$ myFolder
bashboy@host:~/Files/Scripts/Main$

এটি আসলে পরিবেশ পরিবর্তনশীল নয় আপনি exportএটি না করে।
কিথ থম্পসন

4
@ কিথথম্পসন ঠিক আছে, এটি কেবল একটি শেল ভেরিয়েবল । তবে, আপনি এটিকে রফতানি করতে চান না কারণ আপনি চান না এটি সম্ভবত শিশু প্রক্রিয়াগুলিকে প্রভাবিত করে। আপনি এটি আপনার .bashrcবা যে কোনও রিসোর্স ফাইলে এটি ব্যবহার করুন এবং এটি তাত্ক্ষণিক শেলটিতে সংজ্ঞায়িত করা হবে তবে শেল স্ক্রিপ্টগুলিতে নয় sc
ডেভিড ডব্লিউ।

আমি এই সমাধানগুলিকে পছন্দ করি কারণ এটি অটো সম্পূর্ণতার সাথে কাজ করে
ভ্যাসিলিস

5

প্রথমত, $প্রশ্নটির কোড তৈরির জন্য আপনার "মাইফোল্ড" এর মানটি অ্যাক্সেস করতে হবে:

cd "$myFold"

এটিকে সহজ করার জন্য আপনি একটি উপাধি তৈরি করতে পারেন ~/.bashrc:

alias cdmain='cd ~/Files/Scripts/Main'

.bashrcবর্তমান বাশ সেশনে উপনামটি উপলভ্য করার জন্য একবার উত্স উত্সাহ দিতে ভুলবেন না :

source ~/.bashrc

এখন আপনি এটি ব্যবহার করে ফোল্ডারে পরিবর্তন করতে পারেন:

cdmain

4

আর একটি বিকল্প প্রতীকী লিঙ্ক ব্যবহার করা হবে। অর্থাত:

ln -s ~/Files/Scripts/Main ~/myFold

এর পরে আপনি এতে অপারেশন করতে পারেন ~/myFold, যেমন:

cp some_file.txt ~/myFold

যা ফাইলটি রাখবে ~/Files/Scripts/Main। আপনি এর সাথে যে কোনও সময় প্রতীকী লিঙ্কটি সরিয়ে ফেলতে পারেন rm ~/myFold, যা মূল ডিরেক্টরিটি রাখবে।


এক নেতিবাচক: আপনি যদি cd myFoldতা করেন তবে pwdএটি প্রদর্শিত হবে যে আপনি আমার ফোল্ডে রয়েছেন। এটি আমার জন্য একটি চুক্তি ব্রেকার কারণ p4 উত্স নিয়ন্ত্রণের সাথে আপেক্ষিক কমান্ড বর্তমান ডিরেক্টরিতে নির্ভর করে।
ব্যবহারকারী5910

4
@ ব্যবহারকারী5910 - ব্যবহারpwd -P
ডিভিজে

2

তবে একটি দিরের জন্য একটি প্রকৃত উপন্যাসও সম্ভব, চেষ্টা করুন

 myScripts="~/Files/Scripts/Main"
 alias myScripts="cd $myScripts"

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

আইএইচটিএইচ


1

পূর্ববর্তী উত্তরগুলি যে আমি চেষ্টা করেছিলাম সেগুলি অ্যালাইজড ডিরেক্টরিটির উপ-ডিরেক্টরিগুলির স্বয়ংক্রিয় সম্প্রসারণের (স্বতঃপূরণ) মঞ্জুরি দেয় না।

যাইহোক, আপনি যদি ডিরেক্টরিটিকে dirsস্ট্যাকের উপরে রাখতে চান তবে ...

$ pushd ~/my/aliased/dir

... তারপরে আপনি dirs -vস্ট্যাকটিতে এর সংখ্যাগত অবস্থানটি দেখতে টাইপ করতে পারেন:

 0  ~/my/aliased/dir
 1  ~/Downloads
 2  /media/usbdrive

এবং ডিরেক্টরি প্যারামিটার আশা করে এমন সমস্ত কমান্ড না থাকলে বেশিরভাগ ক্ষেত্রেই এই সংখ্যাটি ব্যবহার করে তা উল্লেখ করুন:

 $ mv foo.txt ~0  

এমনকি আপনি Tab"এলিয়াসড" ডিরেক্টরিটির তাত্ক্ষণিক উপ-ডিরেক্টরিগুলি প্রদর্শন করতেও ব্যবহার করতে পারেন :

 $ cd ~0/<Tab>
 child_dir1    child_dir2

-1

আপনার স্ক্রিপ্টে নিম্নলিখিত লাইনটি রাখুন

set myFold = '~/Files/Scripts/Main'

টার্মিনাল ব্যবহার

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