নতুন উপনাম পরে পাওয়া যায় না;


9

এখন অবধি আমি ভেবেছিলাম যে শেলের একটি সেমিকোলনে লাইন ব্রেক হিসাবে একইরকম অর্থ রয়েছে (কোনওভাবে)। সুতরাং আমি যে জন্য বিস্মিত ছিল

alias <name>=<replacement text>; <name>

<name>এটি পরবর্তী লাইনে জানা থাকলেও এটি অজানা। csh, tcsh, sh, kshএবং bashএকই আচরণ। কমপক্ষে cshএটির জন্য এটি নয় যে সেফটি সরাসরি ব্যবহার করা হয় বা সেমকোলনের আগে কোনও স্ক্রিপ্ট উত্সাহিত হয় - এলিয়াসগুলি পরে ;জানা যায় না তবে পরবর্তী কমান্ড লাইনে এটি পরিচিত। এটি কি কোনও বাগ বা এই আচরণের উদ্দেশ্য?


"আমি ভেবেছিলাম যে শেলের একটি সেমিকোলন (কোনও না কোনওভাবে) লাইন ব্রেক হিসাবে একই অর্থ রয়েছে" প্রায়। বেশ না!
আলোকিত ঘোড়দৌড়

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

উত্তর:


9

আপনি যে এলিফ সিনট্যাক্সটি ব্যবহার করছেন তা কোনও পসিক্স শেলের জন্য অনুপযুক্ত, একটি পসিক্স শেলের জন্য আপনাকে ব্যবহার করতে হবে:

alias name='replacement'

তবে সমস্ত শেলের জন্য, এটি বিশ্লেষণ করতে পারে না কারণ উপনাম প্রতিস্থাপনটি পার্সারের প্রথম দিকে করা হয়।

আপনার উরফ সেটআপ কার্যকর করার আগে পুরো লাইনটি পার্সার দ্বারা পড়েছিলেন এবং এই কারণে আপনার কমান্ড লাইনটি কাজ করবে না।

যদি পরবর্তী কমান্ড লাইনে উপন্যাসটি উপস্থিত হয়, এটি কার্যকর হবে।


এছাড়াও, কিছু শাঁস পছন্দসই yashবা পছন্দসইভাবে এটির zshনাম প্রসারিত করে না shell -c 'alias name=replacement<newline>replacement'। এটিএন্ডটি-র জন্য kshআপনার টকযুক্ত স্ক্রিপ্টগুলির সমস্যা আছে ।
স্টাফেন চেজেলাস

আমার এই ক্ষেত্রে সিএসএস ব্যবহার করা দরকার - সিনট্যাক্সে কোনও =ব্যবহৃত হয় না alias
ব্যবহারকারী 3224237

@ ব্যবহারকারী 3224237 - এর সাথে কোনও সম্পর্ক নেই =। কারণ শেলটি প্রথমে লাইনটি দেখে যখন ওরফে প্রসারণ ঘটে তখন এটি আপনার পূর্বরূপটি সংজ্ঞায়িত করার আগে হয় ।
ক্যাস

@ স্টাফেইন চেজেলাস "সর্সযুক্ত" স্ক্রিপ্টগুলির সাথে আচরণটি এই কারণে ঘটেছিল যে বোর্ন শেল এই জাতীয় ফাইলগুলি সম্পাদন করার আগে পুরোপুরি পার্স করে। Ksh বোর্ন শেল উত্সের উপর ভিত্তি করে এবং যেটি পরিবর্তন করা হয়নি সেগুলি একই আচরণ করে।
স্কিলি

@ দক্ষতার সাথে, হ্যাঁ, পুরোপুরি zsh/yash -c 'code'যেখানে codeবিশ্লেষণ করা হয়েছে তার একই কারণ । বোর্ন শেলটির ক্ষেত্রে এটি মনে হয় না। সুতরাং আমি মনে করি বোর্ন শেলটি পার্স করে যা codeসেখানে একবারে এক লাইন থাকে।
স্টাফেন চ্যাজেলাস

5

এই আচরণটি পলিক্স দ্বারা আলিয়াস সাবস্টিটিউশনের অধীনে নির্দিষ্ট এবং নির্দিষ্ট করা হয়েছে ।

শেলটি টোকন সনাক্তকরণের ঠিক পরে এবং কোনও ব্যাকরণ বিধি প্রয়োগ করার আগে একটি উপাধি প্রতিস্থাপন করা হয়েছিল। আপনি যখন ওরফে ফোন করেছিলেন <name>তখন কমান্ডটি aliasকার্যকর করা হয়নি।

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