πŸ“œ ПониманиС ‘/dev/null 2>&1’ Π½Π° Bash

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ /dev/null 2>&1

by itisgood
Π’ ΠΌΠΈΡ€Π΅ скриптов Bash ΠΈ Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм часто встрСчаСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ /dev/null 2>&1, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ ставит Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Π² Ρ‚ΡƒΠΏΠΈΠΊ.
ЦСль этой ΡΡ‚Π°Ρ‚ΡŒΠΈ – Ρ€Π°Π·ΡŠΡΡΠ½ΠΈΡ‚ΡŒ эту Π·Π°Π³Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ Π½Π° Π²ΠΈΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ρ€Π°Π·Π»ΠΎΠΆΠΈΠ² Π΅Π΅ Π½Π° ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΈ объяснив Π΅Π΅ практичСскоС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.
Поняв, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ каТдая Ρ‡Π°ΡΡ‚ΡŒ /dev/null 2>&1, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ прСдставлСниС ΠΎ Π΅Π΅ полСзности ΠΈ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² своих скриптах.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ /dev/null?

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ /dev/null 2>&1, Π½Π°ΠΌ сначала Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ /dev/null.
Π’ Unix ΠΈ Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах /dev/null – это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отбрасываСт всС записанныС Π² Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ сообщаСт, Ρ‡Ρ‚ΠΎ опСрация записи ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.
Π•Π³ΠΎ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ “Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ устройством” ΠΈΠ»ΠΈ “Ρ‡Π΅Ρ€Π½ΠΎΠΉ Π΄Ρ‹Ρ€ΠΎΠΉ”, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ избавляСтся ΠΎΡ‚ всСго, Ρ‡Ρ‚ΠΎ Π½Π° Π½Π΅Π³ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ.
Π­Ρ‚Π° функция ΠΏΠΎΠ»Π΅Π·Π½Π° для избавлСния ΠΎΡ‚ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ»ΠΈ скриптов.

ПониманиС дСскрипторов Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π³Π»ΡƒΠ±ΠΆΠ΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов Π² Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСмах. ДСскрипторы Ρ„Π°ΠΉΠ»ΠΎΠ² – это Ρ‚Π΅Ρ€ΠΌΠΈΠ½ индСксации, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ Unix для отслСТивания ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов Ρ‚Ρ€ΠΈ:

  • 0 – стандартный Π²Ρ…ΠΎΠ΄ (stdin)
  • 1 – Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ (stdout)
  • 2 – Бтандартная ошибка (stderr)

πŸ“œ Bash – ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ стандартный Π²Ρ‹Π²ΠΎΠ΄ (stdout) ΠΈ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ (stderr ) Π² ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ„Π°ΠΉΠ» – IT is good

Π­Ρ‚ΠΈ дСскрипторы ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

Π Π°Π·Π±ΠΎΡ€ /dev/null 2>&1

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ /dev/null 2>&1:

  • /dev/null: Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, это Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ устройство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ отбрасываСт всС ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π½Π° Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅.
  • 2>: Π­Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ связана с ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ. 2 прСдставляСт ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ (stderr), Π° символ > ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для пСрСнаправлСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, 2> ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ “ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ”.
  • &1: Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ stderr (2) Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π² Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΡƒΠ½ΠΊΡ‚ назначСния, Ρ‡Ρ‚ΠΎ ΠΈ stdout (1). Π—Π½Π°ΠΊ & ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ слСдуСт Π·Π° Π½ΠΈΠΌ, являСтся дСскриптором Ρ„Π°ΠΉΠ»Π°, Π° Π½Π΅ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½Π΅ΠΌ.
  • Если ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС вмСстС, Ρ‚ΠΎ /dev/null 2>&1 ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ “ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ стандартный Π²Ρ‹Π²ΠΎΠ΄ (stdout) ΠΈ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ (stderr) Π² /dev/null, фактичСски отбросив всС сообщСния ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΈ ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…”.

🐧 ΠŸΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Bash объяснСниС с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ – IT is good

1. ПодавлСниС Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ ошибок

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π½ΠΎ вас Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠ΅Ρ‚ Π΅Π΅ Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ»ΠΈ ошибки, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ /dev/null 2>&1 сохранит ваш Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» чистым:

some-command >/dev/null 2>&1

2. РСгистрация ошибок

Если вас интСрСсуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ошибок, Π° Π½Π΅ стандартный Π²Ρ‹Π²ΠΎΠ΄, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ stderr Π² Ρ„Π°ΠΉΠ», Π° stdout ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ:

some-command > /dev/null 2> error.log

3. ΠžΡ‚Π»Π°Π΄ΠΊΠ° скриптов

ΠŸΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ скрипта.

ΠŸΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ошибок Π² /dev/null ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² этом.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Команда /dev/null 2>&1 – это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт Π² написании скриптов Bash, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ошибок.

Поняв, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π²Ρ‹ смоТСтС ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивныС ΠΈ чистыС сцСнарии. НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΏΠΎΠ΄Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄, Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ошибки ΠΈΠ»ΠΈ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ скрипты, Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ /dev/null 2>&1 являСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ Π½Π°Π²Ρ‹ΠΊΠΎΠΌ для всСх, ΠΊΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ систСмами.

 

You may also like

Leave a Comment