সবেমাত্র তেমন কিছুতে umpুকে পড়ে; আশা করি এটি আমার নোট পোস্ট করার জন্য ওকে। একটি জিনিস যা আমাকে git
যুক্তিগুলির সাথে git help config
এলিয়াসগুলি সম্পর্কে বিভ্রান্ত করে , সম্ভবত এটি থেকে আসে (আমার গিট সংস্করণটি 1.7.9.5):
যদি উলামের সম্প্রসারণটি বিস্মৃতকরনের সাথে উপসর্গ করা হয় তবে এটি শেল কমান্ড হিসাবে বিবেচিত হবে। উদাহরণস্বরূপ, "ওরফে.নেউ =! গিটক - সমস্ত - নট ওআরআইজিএইইডিইডি" সংজ্ঞায়িত করা, "গিট নিউ" শেল কমান্ড "গিটক - সমস্ত - নট ওআরআইজিএইইডিইডি" চালানোর সমতুল্য। নোট করুন যে শেল কমান্ডগুলি কোনও সংগ্রহস্থলের শীর্ষ-স্তরের ডিরেক্টরি থেকে কার্যকর করা হবে যা সম্ভবত বর্তমান ডিরেক্টরি হতে পারে না। [...]
আমি এটি যেভাবে দেখছি - উদ্দীপনা পয়েন্টের সাথে উপসর্গ করার সময় যদি কোনও উপকরণ "শেল কমান্ড হিসাবে বিবেচিত হবে" - তবে আমাকে কোনও ক্রিয়াকলাপ বা sh -c
যুক্তি সহ কেন ব্যবহার করতে হবে ; কেন শুধু আমার আদেশ যেমন লিখছেন না?
আমি এখনও উত্তরটি জানি না - তবে আমি মনে করি বাস্তবে ফলাফলের মধ্যে কিছুটা পার্থক্য রয়েছে। এখানে একটি ছোট পরীক্ষা - এটি আপনার .git/config
বা আপনার মধ্যে ফেলে দিন ~/.gitconfig
:
[alias]
# ...
ech = "! echo rem: "
shech = "! sh -c 'echo rem:' "
fech = "! f() { echo rem: ; }; f " # must have ; after echo!
echargs = "! echo 0[[\"$0\"]] 1-\"$1\"/ A-"$@"/ "
fechargs = "! f() { echo 0[[\"$0\"]] 1-\"$1\"/ A-"$@"/ ; }; f "
আমি এই এলিয়াসগুলি চালিয়ে যাচ্ছি তা এখানে:
$ git ech word1 word2
rem: word1 word2
$ git shech word1 word2
rem:
$ git fech word1 word2
rem:
$ git echargs word1 word2
0[[ echo 0[["$0"]] 1-"$1"/ A-$@/ ]] 1-word1/ A-word1 word2/ word1 word2
$ git fechargs word1 word2
0[[ f() { echo 0[["$0"]] 1-"$1"/ A-$@/ ; }; f ]] 1-word1/ A-word1 word2/
... বা: যখন আপনি একটি উপনামে " !
যেমন রয়েছে" এর পরে "প্লেইন" কমান্ডটি ব্যবহার করছেন git
- তখন git
স্বয়ংক্রিয়ভাবে সেই আদেশটিতে যুক্তি তালিকাটি সংযোজন করা হয়! এটি এড়ানোর একটি উপায় হ'ল আপনার স্ক্রিপ্টটিকে ফাংশন হিসাবে বলা - বা যুক্তি হিসাবে sh -c
।
এখানে (আমার জন্য) আরও একটি আকর্ষণীয় বিষয় হ'ল শেল স্ক্রিপ্টে, কেউ সাধারণত স্বয়ংক্রিয় ভেরিয়েবলটি $0
স্ক্রিপ্টের ফাইলের নাম হিসাবে প্রত্যাশা করে । তবে একটি git
উপন্যাস ফাংশনের জন্য $0
আর্গুমেন্টটি মূলত পুরো স্ট্রিংয়ের বিষয়বস্তু command কমান্ডটি নির্দিষ্ট করে (কনফিগ ফাইলে প্রবেশ করানো হয়েছে)।
এই কারণেই, আমার ধারণা, আপনি যদি ভুল জিজ্ঞাসা করে থাকেন - নীচের ক্ষেত্রে এটি বাইরের ডাবল উদ্ধৃতিগুলি থেকে বেরিয়ে আসবে:
[alias]
# ...
fail = ! \"echo 'A' 'B'\"
... - তাহলে git
(আমার পক্ষে, কমপক্ষে) কিছুটা গুপ্ত বার্তা দিয়ে ব্যর্থ হবে:
$ git fail
"echo 'A' 'B'": 1: echo 'A' 'B': not found
fatal: While expanding alias 'fail': ' "echo 'A' 'B'"': No such file or directory
আমি মনে করি, যেহেতু git
পুরো স্ট্রিংটি কেবল একটি যুক্তি হিসাবে "দেখেছি" !
- এটি এটিকে এক্সিকিউটেবল ফাইল হিসাবে চালানোর চেষ্টা করেছিল; এবং অনুরূপভাবে এটি "echo 'A' 'B'"
ফাইল হিসাবে খুঁজে পেতে ব্যর্থ হয়েছিল ।
যাই হোক না কেন, git help config
উপরের উদ্ধৃতিটির প্রসঙ্গে , আমি অনুমান করতে পারি যে এটির মতো এমন কিছু বলা আরও সঠিক: " ..." অনুরোধ "গিট নিউ" শেল কমান্ড চালানোর সমতুল্য "গিট - সমস্ত - নন ওরিগহাইড $ @ ", যেখানে $ @ রানটাইমে কমান্ড লাইন থেকে গিট কমান্ড ওরফে প্রেরণ করা আর্গুমেন্ট ... ... "। আমি মনে করি এটিও ব্যাখ্যা করবে, কেন ওপিতে "সরাসরি" পদ্ধতির অবস্থানগত পরামিতিগুলির সাথে কাজ করে না।
$1
কাজ করা উচিত)।