ടെർമിനൽ വെള്ളിയാഴ്ച: സ്റ്റാൻഡേർഡ് സ്ട്രീം

മറ്റൊരു വെള്ളിയാഴ്ചയിലേക്ക് സ്വാഗതം ...

ടെർമിനലിന്റെ ഒരു ചെറിയ ഭാഗം അറിയാനുള്ള സമയമാണിത്. വളരെയധികം ആലോചിച്ച ശേഷം ഇതിനെക്കുറിച്ച് ഒരു പോസ്റ്റ് സൃഷ്ടിക്കാൻ ഞാൻ തീരുമാനിച്ചു സാധാരണ സ്ട്രീമുകൾ; ഇത് ഉപരിപ്ലവമായിരിക്കുമെങ്കിലും, ഇത് എല്ലാവരും അറിഞ്ഞിരിക്കേണ്ട ഒന്നാണെന്ന് ഞാൻ കരുതുന്നു.

സ്റ്റാൻഡേർഡ് സ്ട്രീം

സ്റ്റാൻഡേർഡ് സ്ട്രീം ഉപയോക്താവും ടെർമിനലും തമ്മിലുള്ള നിരവധി ആശയവിനിമയ ചാനലുകൾ ഉൾക്കൊള്ളുന്നതാണ് ഇത്. ഒരു കമാൻഡ് എക്സിക്യൂട്ട് ചെയ്യുമ്പോൾ ഈ ഇൻപുട്ട് / put ട്ട്‌പുട്ട് “ചാനലുകൾ” വിവരങ്ങൾ പ്രദർശിപ്പിക്കുകയോ പിടിച്ചെടുക്കുകയോ ചെയ്യുന്നു.

സ്റ്റാൻഡേർഡ് സ്ട്രീമുകളിലെ ദ്രുത ഡയഗ്രം.

സ്റ്റാൻഡേർഡ് സ്ട്രീമുകളിലെ ദ്രുത ഡയഗ്രം.

3 ഐ / ഒ കണക്ഷനുകൾ ഇവയാണ്: stdin അടിസ്ഥാന ഇൻപുട്ട്, stdout അടിസ്ഥാന .ട്ട്‌പുട്ട്, stderr സാധാരണ പിശക്.

stdin: സ്റ്റാൻഡേർഡ് ഇൻപുട്ട്

പൈപ്പുകൾ, റീഡയറക്ഷൻ, കീബോർഡ് മുതലായവയിലൂടെ ഒരു കമാൻഡിൽ നിന്ന് ഞങ്ങൾ വിവരങ്ങൾ പിടിച്ചെടുക്കുന്ന രീതിയാണ് സ്റ്റാൻഡേർഡ് ഇൻപുട്ട്. ഫയൽ ഡിസ്ക്രിപ്റ്റർ 0 ഉപയോഗിച്ച് ഞങ്ങൾ ഇത് തിരിച്ചറിയുന്നു.

ഇൻപുട്ട്, output ട്ട്‌പുട്ട് ചാനലുകൾ ആക്‌സസ്സുചെയ്യുന്നതിനുള്ള ഒരു സൂചകമാണ് ഡിസ്ക്രിപ്റ്റർ. ഇവ int മൂല്യങ്ങളാണ്, സാധാരണയായി 0, 1, 2.

Stdin ന്റെ ഒരു ഉദാഹരണം:

<ലിസ്റ്റിംഗ് അടുക്കുക

ഇത് ലിസ്റ്റിലുള്ള എല്ലാ വിവരങ്ങളും എടുക്കുന്നു - ഈ സാഹചര്യത്തിൽ ക്രമരഹിതമായി എഴുതിയ അക്കങ്ങൾ - ഫയൽ ls കമാൻഡിലേക്ക് റീഡയറക്ട് ചെയ്യുമ്പോൾ, അത് അക്കങ്ങളുടെ പട്ടിക അക്ഷരമാലാക്രമത്തിൽ അടുക്കുന്നു. ഈ ഉദാഹരണത്തിൽ‌ പതാകകൾ‌ വ്യക്തമാണ്.

stdout: സ്റ്റാൻഡേർഡ് .ട്ട്‌പുട്ട്

സ്റ്റാൻഡേർഡ് output ട്ട്‌പുട്ട്, അതിന്റെ പേര് സൂചിപ്പിക്കുന്നത് പോലെ, ഒരു കമാൻഡിന്റെ output ട്ട്‌പുട്ട് കൺസോൾ വഴി പ്രദർശിപ്പിക്കുന്നു. നമ്മൾ ls എഴുതിയാൽ അത് സ്ക്രീനിൽ കാണിക്കുന്ന എല്ലാ വിവരങ്ങളും സ്റ്റാൻഡേർഡ് .ട്ട്പുട്ടാണ്. ഇതിനെ ഡിസ്ക്രിപ്റ്റർ 1 പ്രതിനിധീകരിക്കുന്നു.

ഇപ്പോൾ ഞാൻ ബാഷ് ഹാഹയെ ഇഷ്ടപ്പെടുന്നതിനാൽ ബാഷ് എഴുതിയ ഒരു സ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് stdin, stdout എന്നിവ ഇൻസ്റ്റാൾ ചെയ്യാൻ ശ്രമിക്കും. 🙂

test.sh

#! / bin / bash എങ്കിൽ [-t 0]; തുടർന്ന് "നിങ്ങൾ stdout ഉപയോഗിക്കുന്നു" elif [-t 1] പ്രതിധ്വനിപ്പിക്കുക; തുടർന്ന് "നിങ്ങൾ stdin ഉപയോഗിക്കുന്നു" അല്ലെങ്കിൽ എക്കോ "ക്രൂരമായ പിശക്" fi പ്രതിധ്വനിപ്പിക്കുക

സ്ക്രിപ്റ്റ് എങ്ങനെ ഉപയോഗിക്കാമെന്ന് വ്യക്തമാക്കുന്ന ഒരു സ്ക്രീൻഷോട്ട്. സ്ക്രിപ്റ്റ് ഉപയോഗത്തോടെ ഒരു പൈപ്പ് റീഡയറക്ട് ചെയ്യുമ്പോഴോ ഉപയോഗിക്കുമ്പോഴോ ടെസ്റ്റ്-ടി stdout സ്ക്രിപ്റ്റ് മാത്രമേ എക്സിക്യൂട്ട് ചെയ്തിട്ടുള്ളൂ, ഇല്ലെങ്കിൽ അത് വ്യക്തമായും stdin ആണോ എന്ന് അറിയാൻ.

bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
സംശയാസ്‌പദമായ സ്‌ക്രിപ്റ്റും അതിന്റെ p ട്ട്‌പുട്ടുകളും ...

സംശയാസ്‌പദമായ സ്‌ക്രിപ്റ്റും അതിന്റെ p ട്ട്‌പുട്ടുകളും ...

കമാൻഡ് പരിഷ്‌ക്കരിക്കാനും പരിശീലിക്കാനും ഓർമ്മിക്കുക, അതുവഴി നിങ്ങൾ പഠിക്കും.

stderr: അടിസ്ഥാന പിശക്

പ്രോഗ്രാമുകൾ പിശകുകളോ ഡയഗ്നോസ്റ്റിക്സോ പ്രദർശിപ്പിക്കുന്ന രീതിയാണ് സ്റ്റാൻഡേർഡ് പിശക്. ഡിസ്ക്രിപ്റ്റർ 2 ഇതിനെ പ്രതിനിധീകരിക്കുന്നു.

ആശയം മനസിലാക്കാൻ, ഇതാണ് സ്ഥിതി: ഒരു കമാൻഡിൽ നിന്ന് ഒരു പിശക് സംരക്ഷിക്കാൻ ഞങ്ങൾ ആഗ്രഹിക്കുമ്പോൾ, ആദ്യം ചിന്തിക്കുന്നത് the ട്ട്‌പുട്ട് പ്ലെയിൻ ടെക്സ്റ്റിലേക്ക് റീഡയറക്ട് ചെയ്യുക എന്നതാണ്.

ls> info.txt

ഇത് പ്രവർത്തിക്കും, കമാൻഡ് വിവരങ്ങൾ പ്ലെയിൻ ടെക്സ്റ്റ് ഫയലിൽ സൂക്ഷിക്കും. പിശക് സംരക്ഷിക്കുമ്പോൾ, അത് സംഭരിക്കുന്നില്ല, പക്ഷേ അത് സ്ക്രീനിൽ കാണിക്കുന്നു, പ്ലെയിൻ ടെക്സ്റ്റ് ഫയൽ ശൂന്യമാണ്.

പകരം ഫയലിൽ stderr സംരക്ഷിക്കാൻ സൂചിപ്പിക്കാൻ 2> ഉപയോഗിക്കുകയാണെങ്കിൽ:

ls foo 2> info.txt

ഇപ്പോൾ ഇത് ടെക്സ്റ്റ് ഫയലിൽ പിശക് വിവരങ്ങൾ സംരക്ഷിക്കും.

മിക്കതും ഷെൽ &> ഉപയോഗിച്ച് ഒരൊറ്റ കമാൻഡ് കമാൻഡിൽ stderr, stdout എന്നിവ സംഭരിക്കാൻ അനുവദിക്കുക, ഇവിടെ Foo നിലവിലില്ലാത്ത ഡയറക്ടറിയാണ്

ls ഡ s ൺ‌ലോഡുകൾ‌ Foo &> info.txt

ഫൂവിൽ ls എക്സിക്യൂട്ട് ചെയ്യുമ്പോൾ പിശകിന്റെ വിവരങ്ങൾ ഈ ഫയലിൽ അടങ്ങിയിരിക്കും കൂടാതെ ഡ s ൺലോഡുകൾക്ക് കീഴിലുള്ള ഡയറക്ടറികൾ പട്ടികപ്പെടുത്തുകയും ചെയ്യും.

ഒടുവിൽ, എന്താണ് പ്രസിദ്ധമായത് 2> & 1?

ലളിതവും stderr നെ stdout- ലേക്ക് റീഡയറക്‌ട് ചെയ്യുക. അതിനർത്ഥം> ഒപ്പം 1 ന്റെ മധ്യത്തിലും ഇത് stdout ലേക്ക് റീഡയറക്‌ട് ചെയ്യുമെന്നാണ്. അത് ഇല്ലായിരുന്നുവെങ്കിൽ, ഇത് ഇങ്ങനെയായിരിക്കും ... "പിശക് 1 ഫയലിലേക്ക് റീഡയറക്ട് ചെയ്യുക".

ഇതുപയോഗിച്ച് റീഡയറക്‌ടുചെയ്യാനും കഴിയും:

  • ഒരു ഫയലിലേക്ക് stdout ചെയ്യുക
  • ഒരു ഫയലിലേക്ക് stderr
  • stdout to stderr
  • stderr to stdout
  • ഒരു ഫയലിലേക്ക് stderr ഉം stdout ഉം
  • മറ്റുള്ളവയിൽ

ഇന്നത്തെ ആളുകൾക്ക് അതാണ്. നിർത്തിയതിന് ഞങ്ങൾ വായിക്കുകയും നന്ദി പറയുകയും ചെയ്യുന്നു. 😀


ലേഖനത്തിന്റെ ഉള്ളടക്കം ഞങ്ങളുടെ തത്ത്വങ്ങൾ പാലിക്കുന്നു എഡിറ്റോറിയൽ എത്തിക്സ്. ഒരു പിശക് റിപ്പോർട്ടുചെയ്യാൻ ക്ലിക്കുചെയ്യുക ഇവിടെ.

6 അഭിപ്രായങ്ങൾ, നിങ്ങളുടേത് വിടുക

നിങ്ങളുടെ അഭിപ്രായം ഇടുക

നിങ്ങളുടെ ഇമെയിൽ വിലാസം പ്രസിദ്ധീകരിച്ചു ചെയ്യില്ല.

*

*

  1. ഡാറ്റയുടെ ഉത്തരവാദിത്തം: മിഗുവൽ ഏഞ്ചൽ ഗാറ്റൻ
  2. ഡാറ്റയുടെ ഉദ്ദേശ്യം: സ്പാം നിയന്ത്രിക്കുക, അഭിപ്രായ മാനേജുമെന്റ്.
  3. നിയമസാധുത: നിങ്ങളുടെ സമ്മതം
  4. ഡാറ്റയുടെ ആശയവിനിമയം: നിയമപരമായ ബാധ്യതയല്ലാതെ ഡാറ്റ മൂന്നാം കക്ഷികളുമായി ആശയവിനിമയം നടത്തുകയില്ല.
  5. ഡാറ്റ സംഭരണം: ഒസെന്റസ് നെറ്റ്‌വർക്കുകൾ (ഇയു) ഹോസ്റ്റുചെയ്യുന്ന ഡാറ്റാബേസ്
  6. അവകാശങ്ങൾ: ഏത് സമയത്തും നിങ്ങളുടെ വിവരങ്ങൾ പരിമിതപ്പെടുത്താനും വീണ്ടെടുക്കാനും ഇല്ലാതാക്കാനും കഴിയും.

  1.   എലിയോടൈം 3000 പറഞ്ഞു

    താൽപ്പര്യമുണർത്തുന്നു. നിങ്ങളുടെ ട്യൂട്ടോറിയലുകൾക്ക് നന്ദി, ഞാൻ ബാഷിനെ വളരെയധികം ഇഷ്ടപ്പെടുന്നു.

  2.   ക്വിൻസി മാഗൂ പറഞ്ഞു

    പ്രിയ, രസകരമാണ്, എന്നിരുന്നാലും ഇനിപ്പറയുന്ന വരിയിൽ നിങ്ങൾക്ക് ഒരു പിശക് ഉണ്ട്:

    "ഫയൽ ls കമാൻഡിലേക്ക് റീഡയറക്ട് ചെയ്യുമ്പോൾ", അത് "ഫയൽ സോർട്ട് കമാൻഡിലേക്ക് റീഡയറക്ട് ചെയ്യുമ്പോൾ" ആയിരിക്കണം.

    നന്ദി.

  3.   മിഗ്വെൽ പറഞ്ഞു

    വാചകത്തിന്റെ തുടക്കത്തിൽ ഒരു പിശക് ഉണ്ട്, നിങ്ങൾ "ls" കമാൻഡ് സൂചിപ്പിക്കുമ്പോൾ അത് "അടുക്കുക" ആയിരിക്കണം:
    "ലിസ്റ്റിലുള്ള എല്ലാ വിവരങ്ങളും എടുക്കുക - ഈ സാഹചര്യത്തിൽ ക്രമരഹിതമായി എഴുതിയ അക്കങ്ങൾ - ഫയൽ ls കമാൻഡിലേക്ക് റീഡയറക്ട് ചെയ്യുക (ഇവിടെ ഇത് അടുക്കും)"

    നിങ്ങളുടെ ജോലി പങ്കിട്ടതിന് ആശംസകളും നന്ദി

  4.   റോഡർ‌ പറഞ്ഞു

    ക്രോണിന് ഇത് മികച്ചതാണ്, അവിടെ the ട്ട്‌പുട്ട് ഫ്ലഷ് ചെയ്യണമെന്ന് നിങ്ങൾ ആഗ്രഹിക്കുന്നു (/ dev / null) എന്നാൽ പിശകുകൾ ഫയലുകളിൽ സൂക്ഷിക്കണം. കൂടാതെ, ഞാൻ ഇത് ചെയ്യുമ്പോൾ, അവ പരാജയപ്പെടുമ്പോൾ കൃത്യമായി വ്യക്തമാക്കാൻ ഞാൻ സാധാരണയായി തീയതി കമാൻഡ് ഉപയോഗിക്കുന്നു.

    യുണിക്സ് തത്ത്വചിന്ത വികസിപ്പിച്ചെടുത്ത ഈ ഉപകരണങ്ങൾ ബാഷ് (ഷ) ന് ഉണ്ട് "ഒരു കാര്യം ചെയ്യുക, നന്നായി ചെയ്യുക"

  5.   ലോല്ലോ പറഞ്ഞു

    ശരി, ഞാൻ ഒന്നും കണ്ടെത്തിയില്ല

    1.    ശബ്ദം പറഞ്ഞു

      ഹാ, ഇത് നന്നായി വിശദീകരിച്ചിരിക്കുന്നു, നിങ്ങൾക്ക് എന്താണ് മനസ്സിലാകാത്തത്?