किस आदेश के लिए उपनाम है?


28

क्या कोई मुझे बता सकता है कि उपनाम किस टर्मिनल के llलिए है? सभी मैं ऑनलाइन प्राप्त कर सकते हैं कई लोगों को कह रही है कि इसके लिए एक उपनाम है ls -lया ls -laया ls -ltr। लेकिन यह सिर्फ गलत है। परिणाम अलग दिखता है। क्या llइसके सिंटैक्स को देखने और देखने का कोई तरीका है ?

जवाबों:


76

आप विशिष्ट एलियास का अर्थ जांचने के लिए aliasया typeकमांड का उपयोग कर सकते हैं :

$ alias ll
alias ll='ls -alF'

$ type ll
ll is aliased to `ls -alF'

ध्यान दें कि उपनाम अन्य उपनामों का उपयोग कर सकते हैं, इसलिए आपको इसे पुनरावर्ती रूप से जांचना पड़ सकता है, उदाहरण के लिए ll, आपको उस lsकमांड को भी जांचना चाहिए जिसे यह कहता है:

$ alias ls
alias ls='ls --color=auto'

$ type ls
ls is aliased to `ls --color=auto'

तो llवास्तव में इसका मतलब है:

ls --color=auto -alF

10
ध्यान दें कि सामान्य स्थिति में, एक कमांड में एक साथ कई परिभाषाएँ हो सकती हैं। type -a commandnameसभी को प्रकट करेगा - यह बताएगा कि क्या पूर्ववर्ती क्रम में आपके PATH में कमांड एक या एक से अधिक उपनाम, फ़ंक्शन, बिलिन या एक या एक से अधिक निष्पादन योग्य फ़ाइलें हैं। यह समझने में सहायता करता है कि, उदाहरण के लिए, एक कमांड का उपयोग करने से यह अपेक्षित व्यवहार के सभी तरीके से वापस नहीं आता है।
अगली सूचना तक रोक दिया गया।

मैं सुझा दूंगा alias ll='ls -lh'ls -lयदि आप मानव-अनुकूल B / kiB / MiB / GiB के बजाय बाइट्स में आकार चाहते हैं तो चला सकते हैं ।
पीटर कॉर्ड्स

13

llआपके द्वारा परिभाषित एक उपनाम है ~/.bashrc, बशर्ते आपने इसे बदल न दिया हो ls -alF:

$ grep ll= <~/.bashrc
alias ll='ls -alF'

ये तीन विकल्प हैं:

  • -a, --all - से शुरू होने वाली प्रविष्टियों को अनदेखा न करें।
  • -l - एक लंबी सूची प्रारूप का उपयोग करें
  • -F, --classify - अपेंड इंडिकेटर (प्रविष्टियों में से एक * / => @ |)

जैसा

$ grep ls= <~/.bashrc
alias ls='ls --color=auto'

दिखाता है, lsखुद के लिए फिर से एक उपनाम है ls --color=auto:

साथ --color=auto, lsरंग कोड का उत्सर्जन करता है केवल जब मानक आउटपुट एक टर्मिनल से जुड़ा है। LS_COLORSवातावरण चर सेटिंग्स बदल सकते हैं। dircolors इसे सेट करने के लिए कमांड का उपयोग करें ।


जरूरी नहीं .bashrc। यदि आप एक अलग शेल का उपयोग करते हैं, तो यह उस शेल के लिए .rc फ़ाइल में परिभाषित किया जाएगा -, cshrc, .tchshc, और इसी तरह।
jamesqf

@jamesqf मुझे लगता है कि कोई व्यक्ति जो एक अलग शेल का उपयोग करता है वह यह भी जानता है कि कौन से उपनाम इसमें पूर्वनिर्धारित हैं - मैंने प्रश्न को डिफ़ॉल्ट उबंटू सेटअप के बारे में लिया, जहां bashउपयोगकर्ताओं के लिए डिफ़ॉल्ट शेल है और उपनाम llको परिभाषित किया गया है /etc/skel/.bashrcजिसमें नया कॉपी किया गया है उपयोगकर्ता के घर निर्देशिका। बेशक आप अपने स्वयं के उपनामों को संग्रहीत करने के लिए किसी भी फ़ाइल का उपयोग कर सकते हैं - आपको इसकी आवश्यकता है।
मिठाई

2
फ़ाइल को पुनर्निर्देशित करना आवश्यक नहीं है grep, यह फ़ाइल नाम को तर्क के रूप में लेगा। स्टार्टअप फ़ाइलों को टटोलते समय आपको यह पता लगाने में मदद मिलेगी कि अलियास कहाँ है (पुनः) परिभाषित (ध्यान दें कि यह एक फ़ाइल में हो सकता है /etc- यह जानते हुए कि अगर आप इसे उपयोगकर्ता स्टार्टअप फ़ाइल से हटाते हैं तो कुछ सिर खुजलाने से बच जाएंगे और यह अभी भी कायम है या इसका व्यवहार बदल जाता है), यदि आप जल्दी से जानना चाहते हैं कि परिभाषा क्या है, तो उर्फ कमांड, जैसा कि स्वीकृत उत्तर में दिया गया है, काम करेगा।
अगली सूचना तक रोक दिया गया।

@DennisWilliamson फ़ाइल को खोलने देना आवश्यक नहीं है bash, लेकिन यह बहुत बेहतर है! प्रश्न पोस्ट में अंतिम वाक्य पढ़ता है कि क्या llइसके सिंटैक्स को देखने और देखने का कोई तरीका है ? , यही मेरा जवाब है।
मिठाई

3

आप अपने ~ / .bashrc (या कुछ फ़ाइल जहाँ आपके उपनाम हैं) में देख सकते हैं या आप अपने शेल में इनमें से कुछ कमांड लिख सकते हैं:

command -v ll # "command" is a shell built-in that display information about       
              # the command. Use the built-in "help command" to see the 
              # options.
type -p ll # "type" is another built-in that display information about how the 
           # command would be interpreted
grep -r "alias ll=" ~ # and don't worry about de .file that contains your 
                      # alias. This command search recursively  under  each  
                      # folder of your home. So it's something rude.
find ~ -maxdepth 1 -type f | xargs grep "alias ll" # Just look in 
                      # the files (not folders) in your home folder

लेकिन बिना उपयोग के खोजें -name "। *" क्यों है? क्योंकि आप इसे अपने .bashrc में डाल सकते हैं

source bash_hacks # where the file bash_hacks, in your home directory can 
                  # contain the alias ll='ls -la etc etc'.

चूँकि "ll" यह एक उपनाम है, यह कोई ऐसा नहीं है जिसका केवल एक ही अर्थ है (ll = 'ls -alF --color'), आप अपने "ll" को एक अन्य कॉमैंड की तरह उपनाम दे सकते हैं, मुझे नहीं पता, "rm" । मुझे लगता है कि यह एक सम्मेलन (आम उपयोगों का उत्पाद) है।

लेकिन "ll" आपके PATH के किसी भी फ़ोल्डर में संग्रहीत प्रोग्राम हो सकता है। उदाहरण के लिए, यदि आपके घर में "बिन" नाम का एक फ़ोल्डर है, तो एक "ll" स्क्रिप्ट बनाएं जिसमें कुछ ऐसा हो

#!/bin/bash
ls -lhar

लेकिन, क्या होगा अगर आपके PATH को नया "ll" कमांड रखने वाले दूसरे फ़ोल्डर को जोड़ने के लिए बदल दिया गया है? अधिक रोचक जानकारी के लिए, आप संबंधित प्रश्न के लिए निम्न लिंक से परामर्श कर सकते हैं।


0

~ / .Bashrc या किसी अन्य स्क्रिप्ट को पार्स करने की कोई आवश्यकता नहीं है। आप aliasटर्मिनल में सभी उपनाम टाइपिंग कमांड के अपने वर्तमान मूल्यों की जांच कर सकते हैं । यह आपकी स्क्रीन पर अपनी परिभाषाओं के साथ सभी परिभाषित उपनाम लाएगा।


नमस्कार और आस्कुबंटू में आपका स्वागत है। इस उत्तर को स्वीकार किए गए किसी चीज़ से कैसे जोड़ा जाए?
ब्रूनी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.