কেন স্ট্যান্ডার্ড কমান্ডগুলির চেয়ে বেশি এলিয়াস করার পরামর্শ দেওয়া হচ্ছে না?


19

উদাহরণস্বরূপ, ~/.bashrcফাইলটিতে (বা সমতুল্য) আমি দেখেছি এমন একটি সাধারণ নাম

alias rm='rm -i'

যাইহোক, আমি লোকদের এর বিপরীতে সুপারিশ করতে দেখেছি কারণ

  1. উপনামটি অন্য সিস্টেমে নাও থাকতে পারে এবং যেহেতু আপনি অমনোযোগী হয়ে পড়েছেন তাই rmআপনি অজান্তেই গুরুত্বপূর্ণ কিছু মুছবেন। [1]
  2. এই উপনামটি ব্যবহার করে আপনি কার্যকরভাবে প্রতিটি কমান্ড টাইপ করতে yবা yesতারপরে প্রশিক্ষণ দিন rmযা পুরো উদ্দেশ্যকে হারাতে পারে।

এর বিরুদ্ধে সুপারিশ করার অন্যান্য কারণ রয়েছে? কিছু প্রোগ্রামের rmপরিবর্তে কেবল কল করা \rmযেতে পারে, এবং এটির সাথে এলিয়াস করা কি তাদের সমস্যার কারণ হতে পারে?

আমি rmকেবল উদাহরণ হিসাবে ব্যবহার করি তবে আমি অন্যান্য কমান্ডও দেখেছি যেমন এলিয়াসের মতো cpবা mvকভার করা আছে। ব্যক্তিগতভাবে, আমি আস্তে আস্তে এই জায়গায় একটি উপন্যাস ব্যবহার করার জন্য নিজেকে ধীরে ধীরে প্রশিক্ষণ দিচ্ছি rm -i:

alias trash=`mv -v -t $HOME/.Trash`

3
আমি যখনই কোনও ডিফল্ট উপন্যাস সহ কোনও সিস্টেমে ভ্রমণ করি rm -i, -fপতাকাটি স্বয়ংক্রিয়ভাবে যোগ করতে এটি আমাকে আরও কিছুটা প্রশিক্ষণ দেয় ।
জান্ডার

আপনি নিজের ইচ্ছামতো rm -iকিছু করতে পারেন। যেমন del, irmইত্যাদি আপনি না প্রয়োজন ওরফে এটা করতে rm। এটি 1 পয়েন্টটি পরিবেষ্ট করে এবং আপনি যা চান তা বেছে বেছে ব্যবহার delবা rmনির্ভর করে আপনি পয়েন্ট 2 কে কিছুটা ডিগ্রি্টও করেন।
মার্টিন টর্নয়েজ

উত্তর:


8

ধরে নিই যে আপনি বাশ ব্যবহার করছেন, এটি স্ক্রিপ্টগুলির জন্য সমস্যা সৃষ্টি করবে না, কারণ অ-ইন্টারেক্টিভ ব্যাশ শেলগুলি উত্স দেয় না ~/.bashrcবা ~/.bash_profile(যা সম্ভবত আপনার এলিয়াস স্থাপন করা হয়েছে, অথবা অন্য স্ক্রিপ্টে আপনার এলিয়াসগুলি সোর্স করার প্রথম পদক্ষেপ) । তবে আপনি যদি স্ক্রিপ্টগুলি সরবরাহ করে থাকেন তবে এটি সমস্যার কারণ হতে পারে:

$ alias echo='command echo foo'
$ cat > script << 'EOF'
> #!/bin/bash
> echo bar
> EOF
$ chmod a+x script
$ ./script
bar
$ . ./script
foo bar

আপনার প্রশ্নটি বিদ্যমান কমান্ডগুলির তুলনায় বেশিরভাগ সাধারণ উদ্বেগকে কভার করে, উদাহরণস্বরূপ, aliasing rmকরার rm -iভাল উদ্দেশ্য আছে, কিন্তু কারণে আপনি রাষ্ট্রপক্ষে বাস্তবে খারাপ।


7

"এর বিপরীতে সুপারিশ করার অন্যান্য কারণ রয়েছে কি?"

অবশ্যই:

()) কারণ একদিন আমি [-----------] এবং নির্লজ্জ লোকদের দ্বারা নির্মিত ভিত্তিগুলিতে যুক্ত হওয়ার আশাবাদী যারা স্ট্যান্ডার্ড কমান্ডগুলি অপরিবর্তনকারী, যদিও ভাল, মানক ।

গুরুতরভাবে যদিও, এগুলি কেবল গুপ্তচর। যদি আপনি নিজেকে বিশ্বাস করেন যে এই কিয়ামতের কোনও গর্তের মধ্যে না পড়ে, তবে কেবল সাবধান হন এবং এগিয়ে যান।

ব্যক্তিগতভাবে, আমি খুব কম স্ট্যান্ডার্ড কমান্ডের ওরফে; আমি সামান্য বৈচিত্রগুলি ব্যবহার করি কারণ আমি, কেবলমাত্র কিছুটা, অলৌকিক এবং মলদ্বারে রেটেনটিভ। তবে এর একটি ভাল ব্যবহার আমি খুঁজে পেয়েছি সিস্টেমগুলির ক্ষেত্রে যেখানে আমি প্রায়শই রুট বা অন্য কোনও ব্যবহারকারী হিসাবে লগইন করি এবং এমন কিছু জিনিস রয়েছে যা আমি দুর্ঘটনাক্রমে / অলসভাবে রুট হিসাবে চালাতে চাই না:

alias irc="echo \"No you don't!\""

অথবা

alias irc="su irc_user"

4

চূড়ান্ত উদাহরণ হিসাবে, আমাকে স্ট্যান্ডার্ড কমান্ড কেবলমাত্র উলামি করা উচিত কেন স্ট্যান্ডার্ড কমান্ডগুলি অ্যালিজ করা ক্ষতিকর হতে পারে:

alias ls='rm'

স্পষ্টতই, এটি খারাপ কারণ এটি কোনও দিন একটি বাজে আশ্চর্য সৃষ্টি করে। তেমনিভাবে, স্ট্যান্ডার্ড কমান্ডগুলিকে উপস্বের সাথে প্রতিস্থাপন করা অবশেষে একটি দুর্ভাগ্য বিস্ময়ের দিকে নিয়ে যায় যখন আপনি কমপক্ষে এটি আশা করেন।

তবে আমাকে একটি সাধারণ দৃশ্য উপস্থাপন করতে দিন যা প্রায় প্রতিটি ইউনিক্স প্রশাসকের ক্যারিয়ারে এগিয়ে যাওয়ার সাথে ঘটবে:

ভবিষ্যতে কোনও দিন, আপনি একটি নতুন কাজ শুরু করবেন এবং অন্যরা প্রতিষ্ঠিত একটি নতুন সিস্টেমে কাজ করবে work শনিবার ভোর তিনটা বাজতে হবে এবং আপনি সোজা চিন্তা করছেন না এবং ভুল করার ঝুঁকিতে আছেন। আপনার মানক পরিবেশ উপলব্ধ হবে না। আসলে, আপনি মূল।

এটি দেওয়া, আপনি কি মনে রাখবেন যে rmএটির বিকল্প নেই rm -i? আপনি যখনই বাক্সটিতে লগইন করছেন তখন আপনি কি আপনার বিশেষ উপাত্তগুলি পরীক্ষা করে যাচ্ছেন? আপনি যদি রুটের পরিবেশ পরিবর্তন করেন তবে আপনার সহকর্মীরা কি আপনার পরিবর্তনে খুশি হবেন?

আমি এই সম্পর্কে বেড়া উপর সততা। আমি আমার কেরিয়ারে হাজার হাজার সিস্টেমে কাজ করেছি এবং যদি আমি এই সমস্ত সিস্টেমে পরিবেশটি সংশোধন করি তবে এর মানটি পাওয়া শক্ত হবে।

Aliasing rmকরতে rm -iখুব সাধারণ এবং আমি দেখেছি এটা অনেক সমস্যা প্রতিরোধ, কিন্তু এটি অনেক চমকের এবং ঘটনাক্রমে মুছে ফেলা ফাইল পুনরুদ্ধার করতে অতিরিক্ত কাজ ঘন্টার ঘটিয়েছে।

সুতরাং এখন আমি প্রচলিত সিস্টেম কমান্ডগুলি aliasing এড়ানোর চেষ্টা করি। পরিবর্তে আমি শেল সহজেই করতে পারে না এমন কাজগুলি করার জন্য উপকরণ এবং ফাংশন ব্যবহার করি। আমি এখন যা করতে ঝোঁক তা হ'ল উপের সাথে একটি অতিরিক্ত চিঠি যুক্ত করা, যেমন:

# List long, with color or special characters, depending on OS
alias  ll='ls -l'
# Long, with metacharacters, show dotfiles, don't show . and ..
alias lll='ls -lA'
# Long, with metacharacters, show dotfiles, show . and ..
alias lla='ls -la'
# List just the dotfiles
alias  l.='ls -l -Ad .????*'

# Useful greps
#alias hgrep='history |grep ${*} |grep -v $$'
alias greph='history |grep ${*}'
alias grepp='ps -ef |grep ${*}'

### Highlight some text.
# From http://unix.stackexchange.com/questions/366/convince-grep-to-output-all-lines-not-just-those-with-matches/367#367
highlight () { grep --color -E "$1|$" $2 ; }

এবং সম্ভবত আমার চূড়ান্ত উরফটি থেকে মুক্তি পাওয়া উচিত, কারণ নতুন অনুশীলনের সাথে খাপ খাইয়ে নিতে সময় লাগে:

# For safety!
alias rm='rm -i'

8
এর জন্য পতাকাগুলি lsমনে রাখা দশটি এলিয়াস মনে রাখার চেয়ে বেশি সুবিধাজনক হতে পারে।
বার্নহার্ড

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

"চিত্র" (প্রথম উদাহরণ) সত্যিই দরকারী নয়। এটি স্পষ্টত দূষিত, এবং আমরা জানি যে কোনও সিস্টেমের বুবি-ট্র্যাপিং ক্ষতিকারক হতে পারে। আপনার rm-> rm -iউদাহরণটি আরও ভাল। আরেকটি ভাল একটি ~/.trash
হ'ল 19-29 এ

1
@ বার্নহার্ড: সত্য, তবে এলিয়াসগুলি টাইপ করা দ্রুত। (তবে দশজন নির্বিশেষে অনেক বেশি))
ইমানুয়েল বার্গ

2
@ স্টেফানলাসিউস্কি: ইঙ্গিত: নিখুঁত নান্দনিক কারণে কোনও জিনিস কখনও দেখাবে না। যদি না তারা আপনাকে সক্রিয়ভাবে বিরক্ত করে তবে এগুলিকে থাকতে দিন। এটি সেট আপ করার পরে ঘন্টা ব্যয় করার পরে জিনিস সরিয়ে ফেলা এমন একটি দ্রুত কাজ; এবং আপনি যদি কখনও আফসোস করেন তবে তাদেরকে কেবল এমনটা না দেওয়ার জন্য আপনি নিজেকে বোকা বলে মনে করেন।
ইমানুয়েল বার্গ

4

এটির জন্য আরও বিপদ রয়েছে।

উদাহরণস্বরূপ, আপনি shell-commandযদি ইমাসে ব্যবহার করেন তবে আপনি মনে করতে পারেন যে আপনি "আপনার" কমান্ডটি পেয়েছেন (বা উরফ , তবে আপনাকে lsকোনও টার্মিনালে কোনও উপন্যাসের আঘাত করতে হবে না যা আপনি বহুবার ওরফে স্থাপনের কথা ভুলে যাওয়ার আগে ভেবেছিলেন এটি অন্য কোনও কমান্ড হিসাবে ...) - বাস্তবে (ইম্যাক্সে ফিরে), আপনি (অপরিশোধিত) কমান্ড পাবেন। ইমাসগুলি সমস্যা ছাড়াই এটি সম্পাদন করবে, যাতে আপনি ঠিক কী ঘটেছে তা সম্পর্কে অন্ধও হতে পারেন!

বিভিন্ন কম্পিউটার এবং / বা সিস্টেমগুলির জন্য, যদি আপনি মনে করেন যে এটির জন্য পৃথক .rcফাইল সেটআপ করা খুব ক্লান্তিকর হয় তবে আপনার কাছে কেবল এই জাতীয় একটি ফাইল থাকতে ifপারে তবে দর্জি করার শর্ত রয়েছে।

উদাহরণস্বরূপ, প্রতিটি ফাংশন যখন আপনি সেগুলি লিখেছেন তা মূল্যায়ন করার পরিবর্তে, আপনি যখন তাদের কারও সাথে সমস্যার মুখোমুখি হন, সর্বশেষে তাদের "কালো তালিকায়" যুক্ত করুন:

if [[ `uname` == "SunOS" ]]; then
  unset -f mic cpkeep mcp mcph cpindex cpconf # not for Solaris
fi

3

উপকরণ দ্বারা (যেমন, rm=rm -i) স্টাফ দ্বারা স্ট্যান্ডার্ড কমান্ডগুলির নামকরণ পুনরায় নামকরণ করা যেতে পারে যেখানে উপনামটি উপলভ্য নয় su আমি যেমন ব্যবহার করতে না চান, এবং (বিভিন্ন তিক্ত, তিক্ত অভিজ্ঞতার দ্বারা ;-) আমি প্রতিটি কমান্ড দুইবার পড়ার acustomed হয়ে থাকেন, এবং এটি যদি rmবা mvবা অন্য কিছু সম্ভাব্য ক্ষতিকারক তিনবার। এবং এই জাতীয় উপকরণগুলি স্বয়ংক্রিয় "আরএম ফু" ENTER "y" উফ বাড়ে !! যাইহোক (এবং প্রতিটি সময় একটি অতিরিক্ত কী চাপুন)।

তবে তা কেবল আমিই। আপনি যদি এলিয়েন পরিবেশে (অন্যান্য মেশিন, অন্যান্য ব্যবহারকারী, ...) চালানোর আশা না করেন এবং আপনি যেখানেই থাকুন না কেন আপনার পছন্দসই উপকরণ ইনস্টল করতে পারেন, বন্য হয়ে যান go ইউনিক্স বিখ্যাতভাবে ব্যবহারকারীদের নিজের পা গুলি করার জন্য যথেষ্ট দড়ি দেওয়ার চেয়ে বেশি পরিচিত।


0

অন্যান্য উত্তরগুলি ভাল, তবে তারা আপনাকে কেবল কীভাবে প্রভাবিত করে তা কেবল তারা দেখায়।

আমাকে @ স্টেফান লাসউইস্কির উত্তরটি কিছুটা মাথা ঘুরিয়ে দিন।

ধরে নিলেন আপনি সর্বজ্ঞ নন, আপনার ব্যবহারকারীর অ্যাকাউন্টে অন্য কারও কাজ করা দরকার বা কীভাবে কীভাবে করবেন সে সম্পর্কে আপনাকে পরামর্শ দিতে পারে।

তারপরে, যখন তারা কিছু করে বা আপনাকে এটি করতে বলে, এটি প্রত্যাশার মতো কাজ করতে পারে না।

সর্বোপরি, তাদের কী হয়েছে তা ব্যাখ্যা করার জন্য আপনাকে সময় নষ্ট করতে হবে (যদি আপনি ঠিক সেখানে থাকেন এবং মনে করতে পারেন বা সমস্যাটি উদ্ঘাটন করেছেন যে উপনামটিই কি কারণ হয়েছিল)।

সবচেয়ে খারাপভাবে, অন্য উত্তরের একটিতে উদাহরণের উপর একটি মোচড় দেখুন: ওরফে ls = 'rm -rf'।

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