আমি কীভাবে গিট [অ্যাকশন] কমান্ডের (যার মধ্যে স্পেসগুলি অন্তর্ভুক্ত) জন্য একটি নাম তৈরি করতে পারি?


29

আমার বেশিরভাগ এলিয়াস এই ফর্মের: alias p='pwd'

আমি উপনাম করতে চাই git commitযাতে এটি হয়git commit -v

তবে একটি স্থান সহ একটি উপনাম তৈরি করার চেষ্টা একটি ত্রুটি দেয়:

$ alias 'git commit'='git commit -v'
-bash: alias: `git commit': invalid alias name

উত্তর:


31

আপনার প্রশ্নের সরাসরি উত্তর নয় (যেহেতু এলিয়াস কেবল একটি শব্দ হতে পারে), তবে এর git-configপরিবর্তে আপনার ব্যবহার করা উচিত :

git config --global alias.civ commit -v

এটি একটি গিট ওরফে তৈরি করে যাতে git civচলে git commit -v। দুর্ভাগ্যক্রমে, এএফআইএইসি-র সাথে বিদ্যমান গিট কমান্ডগুলি ওভাররাইড করার কোনও উপায় নেই । তবে বিকল্প হিসাবে বেঁচে থাকার জন্য আপনি সর্বদা একটি উপযুক্ত ওরফে নাম বেছে নিতে পারেন।


git configনা সম্পর্কে উত্তর দেওয়ার জন্য নোটটি দেখুনgit-config
মাইকেল ডুরান্ট

আপনার সংযুক্ত থ্রেডের এই উত্তরটি যেহেতু পরিষ্কার করে দিয়েছে, শেল স্ক্রিপ্টের সামান্য বিস্তৃত ব্যবহারের সাহায্যে এলিয়াসগুলির সাথে বিদ্যমান কমান্ডগুলিকে ওভাররাইড করা সম্ভব git। (আমি এই মন্তব্যটিকে একটি সমালোচনা হিসাবে পোস্ট করছি না, বিটিডাব্লু। সে উত্তরটি আপনার প্রায় এক বছর পরে পোস্ট করা হয়েছিল! আমি কেবল এই আশায় পোস্ট করছি যে লোকেরা এটি সহায়ক হতে পারে))
সাম্পাব্লুকপার

17

আপনি একটি কমান্ডের বিষয়ে কথা বলছেন যাতে একটি স্থান অন্তর্ভুক্ত রয়েছে তবে এখানে কমান্ডটি রয়েছে gitএবং সেখানে কোনও স্থান নেই।

গিট কমিট কমান্ড কল করতে আপনার এটি লিখতে হবে

git\ commit ...
'git commit' ...
"git commit" ...

সাধারণত কমান্ডগুলির নামগুলির কারণে তাদের নামগুলিতে স্থান থাকে না কারণ এগুলি শেলের মধ্যে তাদের কল করা অসুবিধাজনক, তাই আমি মনে করি না যে আপনি আপনার সিস্টেমে একটি কমান্ড পাবেন।

csh, tcsh বা zsh আপনাকে উপরের যেকোনকেও উপন্যাসের অনুমতি দেবে, তবে বাশ বা ksh নয় (যদিও pdksh আপনাকে অনুমতি দেবে তবে আপনি সেগুলি ব্যবহার করতে দেবেন না)। জেডএসে:

alias "'git commit'=git commit -v"
'git commit' ...

করতে হবে git commandকমান্ড (যখন বলা 'git command'জন্য একটি alias শুধুমাত্র (একক কোট দিয়ে)) gitসঙ্গে কমান্ড commitএবং -vআর্গুমেন্ট। আপনি যা খুঁজছিলেন তা নয় তবে আমি অনুমান করছিলাম।

যেহেতু aliasকেবলমাত্র উলাম কমান্ড করতে পারে, আপনি এখানে আলেম বলতে পারেন তা হ'ল gitকমান্ড এবং আপনার আর্গুমেন্টের তালিকায় "কমিট" করার পরে "-v" সন্নিবেশ করানো এমন কিছুতে আপনাকে এটির নামকরণ করতে হবে। @ Jw013 এর সমাধানটি সহকারে সবচেয়ে ভাল হবে তবে যদি কোনও কারণে আপনি একটি উপনাম ব্যবহার না করে ব্যবহার করতে পারেন বা নাও করতে পারেন তবে কাজটি করতে আপনি একটি ফাংশন ব্যবহার করতে পারেন:

git() {
  if [ "$1" = commit ]; then
    shift
    set -- commit -v "$@"
  fi
  command git "$@"
}

3
নোট করুন যে ফাঁকা স্থান বা অন্যান্য বিশেষ অক্ষরের সাহায্যে এলিয়াসকে মঞ্জুরি দেওয়া বোর্ন-স্টাইল শেলগুলিতে (যা zsh একটি অদ্ভুত উপায়ে এমুলেট করে) একটি সিএসএস বৈশিষ্ট্য। প্রথম শব্দটি যে কোনও উপায়ে উদ্ধৃত করা হলে বোর্ন-স্টাইলের শেলগুলি ওরফে সম্প্রসারণ অক্ষম করে, রেনানের উত্তর দেখুন
গিলস 'দু: খিত হওয়া বন্ধ করুন'

হ্যাঁ। সে কারণেই আমি বলেছিলাম এটি কেবল csh, tcsh এবং zsh এ কাজ করেছে যাতে সেই বাগ নেই। মনে রাখবেন বোর্ন শেল এলিয়াস সমর্থন করে না। উপাধিগুলি csh দ্বারা প্রবর্তিত হয়েছিল।
স্টাফেন চেজেলাস

9

বাশে আপনি কোনও কপিরাইটের সাথে কোনও কপিরাইটের জন্য কোনও উলাম তৈরি করতে পারবেন না।
যাইহোক, আমি আমার .Bashrc এ নিম্নলিখিত কার্যটি একটি কার্যকারণ হিসাবে ব্যবহার করি।

sudo() { if [[ $@ == "pacman -Syu" ]]; then command pacup.sh; else command sudo "$@"; fi; }

এটি কীভাবে কাজ করে: আপনি যে আদেশটি কল করতে চান তা দিয়ে শুরু করুন। আমার ক্ষেত্রে এটি হয় sudo
তারপরে, আপনি উল্লেখ করেছেন যে এটি কী প্যারামিটারগুলি নেবে। এই ক্ষেত্রে pacman -Syu,।
যদি, ট্রিগার করা হয়, এটি কোন আদেশটি কার্যকর করা উচিত? উপরের বিবৃতিতে এটি হয় pacup.sh
অন্যথায়, কোন আদেশ কার্যকর করা হবে sudo $@,। $@হ'ল, যেমন আপনি দ্বারা অনুমান করা হবে, কমান্ডটি নেয় প্যারামিটার তালিকাটি।

সুতরাং, আপনার বিশেষ ক্ষেত্রে কমান্ড তৈরি করা, এটি হবে:

git() { if [[ $1 == "commit" ]]; then command git commit -v; else command git "$@"; fi; }

তবে আপনি যখন শ্বেতক্ষেত্রের সাহায্যে কমান্ড উরফ করতে চান তখন এই সমাধানটি আরও সাধারণ ক্ষেত্রে হয়।
আপনার নির্দিষ্ট ক্ষেত্রে, আমি আপনাকে jw013 এর সমাধান দিয়ে আপনার গিট কমান্ডগুলি ব্যবহার করে উপন্যাসের পরামর্শ দিয়ে যাবgit-config


মানে না if [[ $1 == 'commit' ]]...? Actually @ এর প্রসারণে আপনি যে প্রতিশ্রুতি রাখতে চান তা আরও বিশদ থাকতে পারে।
কোজিরো

রাইট! আমার খারাপ .. আমি কেবলমাত্র আমার সিস্টেমের জন্য যে বিবৃতিটি ব্যবহার করছি তা পরিবর্তন করেছিলাম।
darnir

এটি দুর্দান্ত - ধন্যবাদ - আমার যা প্রয়োজন তার জন্য এটি নিখুঁত;
cgseller

4

থেকে ব্যাশ ওরফে man পৃষ্ঠা

প্রতিটি সাধারণ কমান্ডের প্রথম শব্দ, যদি উদ্ধৃত না হয়, এটির একটি উলাম আছে কিনা তা পরীক্ষা করা হয়। যদি তা হয় তবে উক্ত শব্দের পরিবর্তে তার নামটি লেখা হবে। উপনামের নাম এবং প্রতিস্থাপন পাঠ্যে শেল মেটাচার্যাক্টর সহ কোনও বৈধ শেল ইনপুট থাকতে পারে ব্যতিক্রমের সাথে উপনামের নামটিতে `= 'থাকতে পারে না।

প্রতিস্থাপন পাঠ্যের প্রথম শব্দটি এলিয়াসগুলির জন্য পরীক্ষা করা হয়, তবে একটি শব্দ যা একটি উপনামের সাথে সাদৃশ্যপূর্ণ তা প্রসারিত হওয়ার পরে দ্বিতীয়বার প্রসারিত হয় না। এর অর্থ হ'ল উদাহরণস্বরূপ, কোনও ব্যক্তি এলএসকে "ls -F" এ পরিণত করতে পারে এবং বাশ প্রতিস্থাপনের পাঠ্যের পুনরাবৃত্তভাবে প্রসারিত করার চেষ্টা করে না।

সুতরাং, যেহেতু কেবলমাত্র প্রথম শব্দটি চেক করা হয়েছে, আপনার একাধিক শব্দের সাথে একটি নাম থাকতে পারে না। ইন এই সুপার ইউজার প্রশ্ন , একটি ফাংশন ব্যবহার করে একটি ওয়ার্কঅ্যারাউন্ড প্রদান করা হয়েছে:

ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }

এটি অভিযোজিত হতে পারে git


আপনার দেওয়া সেই লিঙ্কটি আমার কাছে থাকা ব্যাশ ডকুমেন্টেশনের থেকে আলাদা এবং বশ আচরণের সাথে বৈপরীত্য বলে মনে হয়। এটি উপরে বলে যে উদাহরণস্বরূপ শূন্যস্থানগুলি ওরফে নামগুলিতে অনুমোদিত। এটি আমার কাছে zsh এর মতো আচরণের মতো দেখায় যদিও সেই পৃষ্ঠাটি স্পষ্টভাবে বাশ বলে না।
স্টাফেন চেজেলাস

2
কোনও শব্দকে কোনওভাবে উদ্ধৃত করা হলে @ এসএসএইচ বোর্ন / পসিক্স শেলগুলি বাইপাস ওরফে প্রসারিত করুন। উদাহরণস্বরূপ এর \lsজন্য একটি উপাধি বাইপাস করে ls
গিলস 'অশুভ হওয়া বন্ধ করুন'

1
@Gilles। বোর্ন শেল এলিয়াস বাস্তবায়ন করে না। পসিএক্স বলেছে যে একটি বৈধ উপনামের সাথে মিলিত একটি অব্যক্ত শব্দ (কেবলমাত্র ASCII আলমন + হওয়া [_!%,@]) প্রসারিত হবে। এটি zsh এর '\ ls' এর aliasing, বা ksh / ড্যাশ / বাশ / zsh এর এলিয়াসিং এর মতো সম্প্রসারণকে নিষেধ করে না a-bঅন্যথায় কোনও একক পসিক্স শেল উপস্থিত না থাকায়। এটি কেবল বলে যে একটি পোর্টেবল স্ক্রিপ্ট (শেল নয়) এর মতো কোনও উপনাম ব্যবহার করা উচিত নয়।
স্টাফেন চেজেলাস

2
@sch POSIX বাস্তবায়নের alias লেখা অন্যান্য অক্ষর ব্যবহার করতে পারবেন কিন্তু শব্দ বাধা ওরফে সম্প্রসারণ কোন অংশ উদ্ধৃত । আপনি যদি 'git commit'কোনও পসিক্স শেল-এ কমান্ড পজিশনে লিখেন তবে এটি অবশ্যই একটি বিল্ট-ইন ইউটিলিটি, একটি ফাংশন বা একটি বাহ্যিক কমান্ডের জন্য আবেদন করবে।
গিলস

0

যদিও সঠিক সমাধানটি হ'ল jw013 এর মতো এলিয়াসগুলি ব্যবহার করা পরামর্শ দেওয়া হয়েছে, ফাঁকা জায়গাগুলির সাথে আপনার উপন্যাসটি NEST করতে পারেন alias

উদাহরণস্বরূপ স্থানীয় এবং দূরবর্তীভাবে উভয় শাখা মুছতে আমার একটি উলাম আছে, তবে আমি ব্যবহারকারী সর্বদা শাখা নির্দিষ্ট করে দিতে চাই:

remrem = "!sh -c 'if [ $# -ne 1 ]; then git specBranch; else git push origin :$1 && git branch -d $1; fi' -"

#echoing aliases
specBranch = "!sh -c 'echo Specify branch please!'" 

-1

এই উদাহরণ থেকে , এটি কাজ করা উচিত:

সুতরাং, আপনি যদি এখনও অন্যান্য কমান্ডের সাথে সুডো ব্যবহার করতে চান তবে শাটডাউনের সাথে নয় এবং যদি আপনি অন্য কোনও উপায়ে শাটডাউন উপার্জন করতে সক্ষম হন তবে আপনার থাকতে পারে:

alias sudo='sudo '
alias shutdown="echo nope"

তবে আপনার আদেশ দিয়ে:

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