',' কি '..' দিয়ে এলিয়াস করা যায়?


41

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

$ alias ,,=..
$ cd ,,
-bash: cd: ,,: No such file or directory

6
একটি উপাধি চালানোর জন্য একটি প্রোগ্রাম, প্রোগ্রামটির পক্ষে কোনও যুক্তি নয়; তাই $ ,,যেমন অভিযোগ হবে: bash: ..: Is a directory। (অন্য কথায়, এটি কার্যকর করা যায় না))
jpaugh

5
@ জেপফ: এটি পরিষ্কার করার একটি পরিষ্কার উপায় হ'ল: ওরফে প্রসারণ কেবলমাত্র একটি আদেশের প্রথম "শব্দ" তে ঘটে happens আপনি যেমনটি বলেছেন, এটি কেবল কমান্ড নামগুলির জন্য কাজ করে, আরগস নয়। (এবং আপনি alias 'cd ,,'='cd ..'এটিও করতে পারেন নি Well ঠিক আছে, তবে আপনি cd\ ,,এটিকে সমস্ত শব্দটি তৈরি করার জন্য চালাতে হবে ))
পিটার কর্ডেস

5
Zsh বিবেচনা করুন। বিশ্বব্যাপী alias লেখা তাই আছে, alias -g ,,=..এবং cd ,,আপনি এটা আশা কাজ করে।
মুড়ু

1
পার্শ্ববর্তী চিন্তাভাবনা: find / -type d -exec ln -s .. {}/,, \;... ;-)
টবি স্পিড

2
ইমো: এই কাজ করবেন না। টাইপোগ্রাফিক ত্রুটিগুলি আবরণ করার জন্য উপমা ব্যবহার করা একটি খারাপ অভ্যাস। এই ত্রুটিগুলি অনুলিপি-সংযুক্ত কোড বা স্ক্রীনকাস্টগুলিতে শেষ হতে পারে। এটি অন্যান্য হোস্ট বা অ্যাকাউন্টগুলিতে কাজ করবে না। এবং এই জাতীয় পরিবর্তন (এটি কীভাবে বাস্তবায়িত হয় তার উপর নির্ভর করে) অন্যান্য, অপ্রত্যাশিত, ডিবাগ ত্রুটিগুলি ঘটাতে পারে। আমার পরামর্শ: আপনি যদি কোনও আদেশকে ভুল টাইপ করেন তবে কেবল এটি আবার টাইপ করুন ;-)।
jjmontes

উত্তর:


45

ZSH:

আপনি zsh alias -g ,,=".."যদি যা ব্যবহার করেন তবে তা আপনার ব্যবহারের ক্ষেত্রে নয়, তবে এটি "" "সর্বত্র প্রসারিত করবে cd

থেকে man zshbuiltins:

তাহলে -g পতাকা উপস্থিত থাকলে, একটি বিশ্বব্যাপী ওরফে সংজ্ঞায়িত; কমান্ড পজিশনে না আসলেও গ্লোবাল এলিয়াসগুলি প্রসারিত করা হয়।

BASH:

তাহলে অবধি সীমিত bash(যেমন প্রশ্নের সঙ্গে বাঁধা হয় ), নিম্নলিখিত পড়ুন:

অনুরোধ অনুসারে এটি একটি খাঁটি-ওরফে সমাধান, তবে এটি ব্যবহারকারীকে হতাশ করার প্রয়োজনের চেয়ে আরও বেশি কিছু করবে (আমার পোস্টের শেষে সতর্কতাটি দেখুন)।

উদ্ধৃতি man bash:

যদি উলামের মানটির শেষ অক্ষরটি ফাঁকা হয় তবে তারপরের পরবর্তী কমান্ড শব্দটিও ওরফে প্রসারণের জন্য পরীক্ষা করা হয়।

অতএব ওরফে তা এর যথেষ্ট cdএকটি অতিরিক্ত স্থান সঙ্গে ওরফে এবং তারপর (তার পরবর্তী যুক্তি বিস্তৃত করার জন্য) ,,করার ..। ওটা দেখ

alias cd='cd '
alias ,,='..'

আপনার যা প্রয়োজন ঠিক তা দেয়।

মনে রাখবেন যে এটি কেবল bash(এবং এটির aliasপ্রয়োগের জন্য) নয়, সমস্ত পসিক্স-সংকলক শেলের জন্য সঠিক। এর থেকে একটি উদাহরণ উদ্ধৃত করা man 1p alias(ম্যানুয়ালটি কেবল এই উদাহরণের মাধ্যমে এই বৈশিষ্ট্যটি স্পষ্টভাবে বর্ণনা করে না):

  1. নোহআপ সেট আপ করুন যাতে এটি একটি যুক্তির সাথে মোকাবিলা করতে পারে যা নিজেই একটি নাম নাম:

           alias nohup="nohup "

সতর্কতা: @ পিটারকর্ডস যেমন নিজের মন্তব্যে লিখেছেন, এটি পরে লেখার পরে অন্যান্য এলিয়াসগুলি স্বয়ংক্রিয়ভাবে প্রসারিত করবে cd। এটা তোলে লিখতে প্রয়োজন হতে পারে cd \grepযদি আপনি নামে এক পরিবর্তন ডিরেক্টরির করতে চান grepকিন্তু আপনার grepজন্য একটি alias হয় grep --color=auto। ব্যাকস্ল্যাশ ব্যতীত cd"অত্যধিক যুক্তি" ত্রুটি জানাবে (আপনি cdএকবারে দুটি ডিরেক্টরিতে পারবেন না ) !.


22
এটি একটি চালাক কিন্তু বাজে হ্যাক hack আমি এটা করতে চাই না; দুর্ঘটনাক্রমে আপনাকে কামড় দেওয়ার পক্ষে এটি খুব সহজ। উদাহরণস্বরূপ, যদি আপনি যে কমান্ডটি সাধারণত চালিত করেন তার জন্য যদি আপনার একটি উপাধি থাকে এবং আপনি cdএর উত্স কোডের একটি ডিরেক্টরিতে চান । বা আপনার অন্যান্য নাম এবং সাধারণ ডিরেক্টরি নামের মধ্যে অন্য সংঘর্ষ। ভালো লেগেছে cd drপ্রসারিত হবে cd disown -rআমার জন্য, এই ওরফে সঙ্গে। যাইহোক, cdএই জাতীয় জিনিসগুলির জন্য কোনও ফাংশন সহ বিল্টিনকে ওভাররাইড করা আরও ভাল ।
পিটার কর্ডেস

8
খাঁটি-ওরফে সমাধানের জন্য +1 (আমি কিছু শিখেছি)। একই সাথে আমি পিটারের মন্তব্যের সাথে একমত। আপনার উত্তরে কিছু ধরণের স্পষ্ট সতর্কতা যুক্ত করা উচিত বলে আমি মনে করি।
কামিল ম্যাকিয়েরোভস্কি

58

উপাধিগুলি এটি করতে বোঝানো হয় না, তবে আপনি এমন একটি ফাংশন তৈরি করতে পারেন cdযা সত্যটির জন্য একটি মোড়ক বলে cd। এই আমার জন্য কাজ করে! এটি আপনার .bash_profileবা আপনার পছন্দের প্রোফাইল ফাইলটিতে রেখে দিন।

cd () { if [ "$1" = ",," ]; then builtin cd ..; else builtin cd "$@"; fi; }

বা মন্তব্য এবং চমত্কার বিন্যাস সহ:

cd ()
{
  if [ "$1" = ",," ]; then  # if first argument is ",,"...
    builtin cd ..           # call the builtin cd with ".." instead...
  else
    builtin cd "$@"         # else call builtin cd with original arguments 
  fi
}

সম্পাদনা

ধন্যবাদ ইশারা যে জন্য @derobert if then elseভাল চেয়ে এখানে && ||। এছাড়াও, আমি ঠিক বুঝতে পেরেছি ( * ফেসপালম *) যে কোনও বাস্তবসম্মত যুক্তি (যেমন -L -P) প্রথম যুক্তি না হলে এই বাস্তবায়ন কেবল তখনই কাজ করবে । সুতরাং সতর্কতা অবলম্বন করুন, যদি আপনার টাইপ করার খারাপ অভ্যাস থাকে তবে এটি cd -L ,,আপনাকে সাহায্য করবে না। এবং এটি সঠিকভাবে পরিচালনা করা অপ্রয়োজনীয়, আমার ধারণা।


16
@ বেনজিওয়েব আমি মনে করি "মন্তব্যগুলি এবং সুন্দর বিন্যাস" সংস্করণ যদি অন্যথায় হয় তবে আরও ভাল হবে be
zwol

বাহ লোকেরা, প্রচুর ভাল ধারণা। আমি দেখতে পাচ্ছি যে আপনি প্রয়োজনীয় বৈশিষ্ট্যগুলি যত্ন নেওয়ার জন্য সম্পাদনা বৈশিষ্ট্যটি ব্যবহার করছেন। আমি এটি পরীক্ষা করতে খুব বেশি সময় ব্যয় করিনি। :)
বেনজিউইবি

1
বিকল্পভাবে, $1বিল্ট-ইন কার্যকর করার আগে কেবল ওভাররাইট করুন :cd () { [ "$1" = ",," ] && set .. ; cd "$@"; }
টবি স্পিড

1
@ টবিস্পাইট set .. "${@:2}", বা আপনি প্রথম যুক্তির পরে কিছু হারাবেন।
চিপনার

8
এছাড়াও, প্রযুক্তিগতভাবে ..প্রথম যুক্তি হতে হবে না; cdমধ্যে bashঅপশন বিভিন্ন সময় লাগতে পারে ( -P, -L, -@, -e)।
চিপনার

29

উপমা অবশ্যই একটি কমান্ডের প্রথম শব্দ হতে হবে । এছাড়াও, উপনামটি কোনও শব্দের পরিবর্তে স্থান নির্ধারণের প্রয়োজন নেই)।

বাশ রেফারেন্স ম্যানুয়াল: উপাধি

যখন সরল কমান্ডের প্রথম শব্দ হিসাবে ব্যবহৃত হয় তখন এলিয়াস একটি শব্দের পরিবর্তে স্ট্রিং স্থাপন করতে দেয় ।

আপনি উভয় ওরফে পারে ..এবং ,,হতে cd ..

$ alias ..="cd .."
$ alias ,,="cd .."
$ cd /tmp && pwd
/tmp
$ ,, && pwd
/

ঠিক আমি কি করি! : ডি এই দুটি বিন্দু / কমাগুলি টাইপ করা অনেক সহজcd ..
rav_kr

10
+1, এটি মোটেই খারাপ ধারণা নয়। .. বাশের জন্য এটি করার আরেকটি উপায় shopt -s autocdযা আপনাকে কেবল কোনও নাম লিখিয়ে যে কোনও ডিরেক্টরিতে পরিবর্তন করতে দেয় to অবশ্যই আপনি এখনও ,,
উপন্যাসটি


3

..ডিরেক্টরি পরিবর্তন করার আরেকটি উপায় হ'ল বাশের autocd বৈশিষ্ট্যটি সক্ষম করা :

shopt -s autocd 

আপনি কোনওটির নাম লিখলে এটি স্বয়ংক্রিয়ভাবে ডিরেক্টরিটি পরিবর্তন করবে:

~$ /tmp
cd /tmp
/tmp$ 

আপনার এখনও একটি উপাধি তৈরি ,,করতে হবে তবে এটি কেবলমাত্র দিয়ে করা যেতে পারেalias ,,=..


2

ইতিমধ্যে একটি অ্যাপ্লিকেশন এর জন্য একটি স্ক্রিপ্ট রয়েছে: https://github.com/shyiko/commacd (স্ট্যানলে শুয়িকোর সাথে কোনও সম্পর্ক নেই)।

commacdতিনটি কমান্ড রফতানি করে: ,(এগিয়ে যাওয়ার জন্য), ,,(পিছনে) এবং ,,,(পিছনে + এগিয়ে):

তারা তিনজনই প্রথমে উপসর্গের সাথে মিলিয়ে দেখার চেষ্টা করে। কেবলমাত্র কোনও ফলাফল না পেলে তারা কি সাবস্ট্রিংয়ের (ফাজি) মিলবে fall

আপনার প্রশ্নের উত্তর দেওয়ার জন্য স্ক্রিপ্টটি তিনটি ফাংশনকে কমা দিয়েছিল যা এটি সংজ্ঞায়িত করেছে:

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