কমান্ড ওরফে প্রসারণ দেখুন


67

যদি কোনও watchকমান্ড চালিত হয় একটি উপাধি সহ কমান্ডটি চালায় তবে এটির উপকরণটি প্রসারিত হবে না। আমি একক উদ্ধৃতি এবং ডাবল উদ্ধৃতি উভয় দিয়ে চেষ্টা করেছি, প্রকৃতপক্ষে নীচের নামটি দিয়েছি:

# alias ll
alias ll='ls -l --color=tty'

নিম্নলিখিত কমান্ড ব্যর্থ হবে

# watch ll
sh: ll: command not found

এই ক্ষেত্রে কমান্ড লাইন সম্প্রসারণ কাজ করা উচিত নয়?

উত্তর:


98

উপকরণগুলি কেবল প্রথম আর্গুমেন্ট হিসাবে বা কমান্ডের শেষের দিকে পিছনে স্থান সহ অন্য একটি উপন্যাসের পরে প্রসারিত হয়।

থেকে bashএর help alias:

ভ্যালুতে একটি চলমান স্থানের পরবর্তী নামটি যখন ওরফে প্রসারিত করা হয় তখন তার পরবর্তী বিকল্পটির জন্য উলেস বিকল্পের জন্য পরীক্ষা করা হবে।

এটি করতে, নিম্নলিখিত চেষ্টা করুন:

alias watch='watch '
alias ll='ls -l --color=tty'
watch ll

মনে রাখবেন যে watchডিফল্টরূপে স্ট্রিপ রঙের কিছু সংস্করণ, কিছু সংস্করণে এটি ব্যবহার করে --colorবা বন্ধ করা যেতে পারে -G


1
এটি একেবারে দুর্দান্ত উত্তর! অবশ্যই এবং অবশ্যই +1।
ztank1013

1
ধন্যবাদ ... এই সময়ের জন্য, আমি ১ ব্যবহার করতাম l টিপুন, ২.সিআরটিএল + ইল্ট + ই, ৩ টিপুন এবং তারপরে উপসর্গ ঘড়িটি দিন। এটি টাইম সেভার।
আনিসনে

10
দুর্ভাগ্যক্রমে এই পদ্ধতির একটি সীমাবদ্ধতা রয়েছে যা আপনি বিকল্পগুলি সরবরাহ করতে পারবেন না watchকারণ উপনামটি পরবর্তী শব্দ হওয়া উচিত, যেখানে watchকমান্ড চালানোর আগে তার যুক্তিগুলির প্রয়োজন। যদি আপনি চেষ্টা করে থাকেন তবে watch -n 10 <alias>বাশ উরফটি প্রসারিত করবে না। এটির চারপাশে কাজ করার জন্য, আপনার একটি উপাধি দরকার যা আপনার পছন্দসই বিকল্পগুলি অন্তর্ভুক্ত করে (যেমন, `ওরফে ওয়াচ -10 = 'ওয়াচ-এন 10'), এখনও পিছনের জায়গার সাথে।
indiv

2

ঘড়িটি দেখার আগে আমরা নিজেই ওরফে ম্যানুয়ালি প্রসারিত করতে পারি?

watch $(alias ll | cut -d\' -f2)

ব্যাখ্যা

alias llদেখায় এর ফলাফল :

$ alias ll
alias ll='ls -lAGh'

সুতরাং আমরা কাট এর সীমানা একক উদ্ধৃতি হিসাবে সেট, এবং 2 য় ক্ষেত্রটি কাটা, রেখে:

ls -lAGh

অর্থাত্ প্রসারিত উপনাম। যে তারপর দেওয়া args ফর্ম watch

এটি করার জন্য একটি ফাংশন তৈরি করুন

function watcha {
    watch $(alias "$@" | cut -d\' -f2)
}

তারপর,

watcha ll

পছন্দসই হিসাবে কাজ করে। এটি ভয়াবহ এবং সব ধরণের পরিস্থিতিতে ব্যর্থ হবে। দুঃখিত।


0

আমি ভেবেছিলাম এখানে কার্যকর সমস্যাটি কার্যকর করার সময় watch, " sh -c" আর্গুমেন্টটি দেওয়া হয় যার অর্থ যদি পরিবেশে llএলিফ সংজ্ঞায়িত না হয় sh(dash shell's)তবে এটি প্রসারিত হবে না। তবে আমি ভুল ছিলাম এবং এটি ঘটনা নয়, ক্রিসের উপরের উত্তরটি ঠিক।


2
বেপারটা এমন না. ব্যবহার করে দেখুন watch 'alias ll="ls -l --color=tty"; type ll; ll'
ক্রিস ডাউন

এটি যাচাই করার জন্য তাত্ক্ষণিক প্রতিক্রিয়ার জন্য +1। আমি উপরে ভুল ছিল।
শচীন দিভেকার

@ ক্রিসডাউন, সুতরাং এমনকি যদি ঘড়ির " sh -c" ব্যবহার করে তবে আপনার ব্যাখ্যাটিও প্রযোজ্য sh। আমি কি সঠিক?
শচীন দিবেকার

1
এটি শেল কী হিসাবে ব্যবহৃত হচ্ছে তার উপর নির্ভর করে sh। লক্ষ্য করুন যে, এই করে কাজ:sh -c $'alias ll="ls -l --color=tty"\ntype ll\nll'
ক্রিস নিচে

0

হয়েছে watchএকটি নতুন ইন্টারেক্টিভ শেল, যা ওরফে প্রসারিত হবে সঞ্চালন করুন:

watch -x bash -i -c ll

(দ্য -xথামাতে দেয়ার উদ্দেশ্যে করা হচ্ছে watchএটির মালিক এর ব্যবহার থেকে sh -cআমাদের দেওয়া কমান্ড মোড়ানো। আমরা যে কারণ আমরা পাস করতে হবে না চান -iকরতে shবা bashকরতে, এটি একটি ইন্টারেক্টিভ শেল, যা .bashrc পড়ে এবং alias লেখা সংজ্ঞায়িত করে। সঙ্গে -x, ঘড়ি executes কমান্ড এক্সিকিউট ব্যবহার করে।)

গাহ, আসলে, এটি কাজ করে না। একবার 'এলএল' এর আউটপুট প্রদর্শন করার পরে, 2 সেকেন্ড ঘুমানোর পরে, কাজটি কিছুটা রহস্যজনকভাবে ব্যাকগ্রাউন্ড হয়ে যায়:

1]+  Stopped                 watch -x bash -i -c ll

কেন থামল? খোলা বন্ধনী কোথায় গেল [? ডার্ন আমি ভেবেছিলাম এটি দুর্দান্ত উত্তর হবে তবে আমি এটি কার্যকর করতে পারি না।

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