একটি উপনাম সংজ্ঞায়িত করা এবং অবিলম্বে এটি ব্যবহার করুন


11

এটি ভাল zshকাজ করে:

alias foo=ls
foo

তবে এটি করে না:

alias foo=ls; foo

ইন্টারেক্টিভভাবে চলতে চলতে অতিরিক্ত সময় প্রবেশ করানো টিপুন কোনও সমস্যা নয়। তবে sshহঠাৎ করে যখন এটি চালানো একটি সমস্যা হয়ে দাঁড়ায়:

% ssh zsh@server 'alias foo=ls; foo'
zsh:1: command not found: foo

এমনকি একটি নতুন লাইনের সাথে এটি কাজ করে না:

% ssh zsh@server 'alias foo=ls;
foo'
zsh:2: command not found: foo

অদ্ভুত বিষয়টি এটি zshজানে যে এটি অ্যালিজড হয়েছে:

% ssh zsh@server 'alias foo=ls; alias'
foo=ls
run-help=man
which-command=whence

কীভাবে বলবেন zshযে এলিয়াসগুলি সক্রিয় হওয়া উচিত?


এটি এলিয়াসিংয়ের একটি সাধারণ সমস্যা। আমি ব্যবহার এটা চেষ্টা bashএবং cshতারা একই ভাবে ব্যবহার করে। আমি আশা করি কেউ এটি ব্যাখ্যা করতে পারে।
স্লাইক্স

বাশ কোনও সমস্যা নয়: এসএসএস সার্ভার 'শপট-এক্সপেনড_লিয়াসেস; ওরফে জেজে = এলএস \ এনজেজে'
ওলে

উত্তর:


9

তুমি এটা করতে পারবেনা.

কারণ ইতিহাসের প্রসারণের পরে কেবলমাত্র এলিয়াসগুলি প্রসারিত করা হয়েছিল এবং পুরো লাইনটি একবারে পাঠ করা হয়েছিল, সুতরাং যখন fooমৃত্যুদন্ড কার্যকর করা হয়েছিল, তখন ওরফে সম্প্রসারণ প্রক্রিয়াটি চলে গিয়েছিল, নতুন শখের পরিচয় সনাক্ত করতে শেলের খুব দেরি হয়েছিল।

সবচেয়ে ভালো উপায় আপনি কি করতে পারেন মধ্যে ওরফে সংজ্ঞা হয় .zshrcবা মত ফাংশন ব্যবহার করে jimmij এর উত্তর বা ব্যবহার eval:

alias foo=ls; eval foo

Zsh -c এর সাথে একটি বিশেষ কেস রয়েছে । এই ক্ষেত্রে, সংজ্ঞায়িত করা হয়েছিল যে উপাধিগুলি .zshenvপ্রসারিত হবে।


এটি কেন ssh host 'alias foo=bar<newline>foo'কাজ করে না তা ব্যাখ্যা করবে না । এর জন্য একটি বিশেষ কেস রয়েছেzsh -c
স্টাফেন চেজেলাস

বা ব্যবহার করুনalias foo=ls; eval foo
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস: তাদের সাথে আপডেট হওয়া তথ্যের জন্য ধন্যবাদ। sshকেস সম্পর্কে , আপনি দয়া করে এটি আরও পরিষ্কার করতে পারেন। আমি মনে করি আদেশটি এখনও একবারে পড়েছিল।
cuonglm

10

এটি খুব পরিচিত সমস্যা যা এমনকি zshঅ্যালিয়াসিং অধ্যায় (দেখুন man zshmisc) অধ্যায়ে ম্যানুয়ালটিতে বর্ণিত । এটির সাথে পুনঃব্যবহারের পুনঃব্যবস্থার উপায় হ'ল ওরফেটির পরিবর্তে ফাংশন ব্যবহার করা:

foo() { ls; } ; foo

বা আরও ভাল ক্ষেত্রে ls:

foo() { ls -- "${@:-.}"; } ; foo

পুনশ্চ. ফাংশন সংজ্ঞা (তালিকা) এর শেষে সেমিকোলন এবং জেডএসে ফাঁকা স্থানগুলির প্রয়োজন হয় না, তবে অন্য শেলগুলির অভ্যাস হিসাবে আমি সেগুলি এখনও রেখেছি।


1

কমান্ড লাইন থেকে সি-শেল (সঠিক হতে tcsh) ব্যবহার করে:

mymachine % alias showme "echo here it is"
mymachine % showme
here it is

বা এটি .cshrc ফাইলে রাখুন তারপরে ফাইলটি উত্স করুন:

mymachine % source ~/.cshrc

mymachine % showme
here it is

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