বাশ: ওরফে নামে স্পেস


116

আমি ব্যাশে একটি এলিয়াস তৈরি করার চেষ্টা করছি। আমি কি কাজ করতে চান মানচিত্র ls -laথেকেls -la | more

আমার .bashrc ফাইলে এটিই আমি চেষ্টা করেছি:

alias 'ls -la'='ls -la | more'

তবে এটি কাজ করে না কারণ (আমি ধরে নিই) এটির উপনামের নামের জায়গাগুলি রয়েছে। এটির জন্য কি কোনও কাজ আছে?


8
কেন করবেন নাalias lsm='ls -la | more'
নিফলে

উত্তর:


125

ব্যাশ ডকুমেন্টেশন যুক্তরাষ্ট্র "প্রায় প্রতিটি কাজের জন্য, শেল ফাংশন alias লেখা বেশী প্রাধান্য পাচ্ছে।" এখানে একটি শেল ফাংশন যা প্রতিস্থাপন করে lsএবং আউটপুটটি পাইপ করাতে দেয় moreযদি আর্গুমেন্টটি (কেবল) থাকে -la

ls() {
    if [[ $@ == "-la" ]]; then
        command ls -la | more
    else
        command ls "$@"
    fi
}

ওয়ান-লাইনার হিসাবে:

ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }

স্বয়ংক্রিয়ভাবে পাইপ আউটপুট:

ls -la

1
যদি আপনার বিবৃতিটির ভিতরে ডাবল বন্ধনী ব্যবহার করার প্রয়োজন হয়?
ষাট ফুটারসুডে

1
@ এসিস্টিফুটারসডুড: ডাবল-বন্ধনী ফর্মটি আরও শক্তিশালী এবং আমি এটি অভ্যাস অনুসারে ব্যবহার করি। Mywiki.wooledge.org/BashFAQ/031
ডেনিস উইলিয়ামসন

তাহলে চূড়ান্ত আদেশ কি? ওরফে ls = 'ls ()' ??
জিফ

1
@ জিফ: না, আমার উত্তরটিতে একটি উলামের পরিবর্তে একটি ফাংশন ব্যবহার করা হয়েছে । এটি আরও পরিষ্কার করার চেষ্টা করার জন্য আমি এটি সম্পাদনা করেছি।
ডেনিস উইলিয়ামসন

6
@মার্লিনপ্যাট: ফাংশনটিকে commandপুনরাবৃত্তভাবে ডাকা থেকে বাধা দেয়।
ডেনিস উইলিয়ামসন

53

থেকে ওরফে man পৃষ্ঠা :

প্রতিটি সাধারণ কমান্ডের প্রথম শব্দ, যদি উদ্ধৃত না হয়, এটির একটি উলাম আছে কিনা তা পরীক্ষা করা হয়। যদি তা হয় তবে উক্ত শব্দের পরিবর্তে তার নামটি লেখা হবে। উপনামের নাম এবং প্রতিস্থাপন পাঠ্যে শেল মেটাচার্যাক্টর সহ কোনও বৈধ শেল ইনপুট থাকতে পারে ব্যতিক্রমের সাথে উপনামের নামটিতে `= 'থাকতে পারে না।

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


8
+1 আমাকে এলএস-এলএল নাম হিসাবে ব্যবহার করার অনুমতি নেই কেন তা বোঝানোর জন্য।
ষাট ফুটারসুডে

7
এটি সহায়ক ছিল কারণ এটি সমাধান করার চেষ্টা না করে এটি প্রশ্নের উত্তর দিয়েছে। আমি এখানে এসেছি কারণ আমি একটি জায়গা রেখে একটি উপনাম তৈরি করতে চেয়েছিলাম এবং এটি ঘটবে না।
রাগান্বিত

এটি কেবল আমার প্রশ্নের উত্তরই দেয়নি, তবে কীভাবে এলিয়াসিং মেকানিজম কার্যত কাজ করে তা সম্পর্কে আমাকে মূল্যবান অন্তর্দৃষ্টি দিয়েছে। ম্যান পৃষ্ঠা থেকে আপনার উদ্ধৃতিটি বেশ সহায়ক ছিল।
লিলি ফিনলে

14

ডেনিসের উত্তর থেকে নেওয়া কিছুটা উন্নত পদ্ধতি:

function ls() {
  case $* in
    -la* ) shift 1; command ls -la "$@" | more ;;
    * ) command ls "$@" ;;
  esac
}

বা এক-লাইনার:

function ls() { case $* in -la* ) shift 1; command ls -la "$@" | more ;; * ) command ls "$@" ;; esac }

এটি প্রয়োজন অনুসারে কমান্ডের পরে আরও বিকল্প / যুক্তি যুক্ত করার অনুমতি দেয়, উদাহরণস্বরূপ ls -la -h


2
আমি ls -latএই চিকিত্সা থেকে বাদ দিতে চাইলে এই হ্যান্ডেলটি কীভাবে করবে ? আমি -la*এন্ট্রি উপরে এটি পরিচালনা করতে একটি মামলা করা প্রয়োজন , হ্যাঁ?
স্টিভেন লু

-1

আপনি এই উপনামটি এখনও স্থির করতে পারেন, তবে স্থানটি কমান্ড শব্দের অংশ হিসাবে যাতে আপনার উদ্ধৃতি প্রয়োজন। সুতরাং বিকল্পটি "ls -la" -p patternপাস করবে , না ।-p patternmorels

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