22Àå. ÇÁ·Î¼¼½º ġȯ(Process Substitution)

ÇÁ·Î¼¼½º ġȯÀº ¸í·É¾î ġȯ°ú ¦À» ÀÌ·ç´Â °³³äÀÔ´Ï´Ù. ¸í·É¾î ġȯÀº dir_contents=`ls -al` À̳ª xref=$(grep word datafile) ó·³ ¸í·É¾îÀÇ °á°ú¸¦ ¾î¶² º¯¼öÀÇ °ªÀ¸·Î ¼³Á¤ÇØ ÁÝ´Ï´Ù. ÇÁ·Î¼¼½º ġȯÀº ÇÁ·Î¼¼½ºÀÇ Ãâ·ÂÀ» ´Ù¸¥ ÇÁ·Î¼¼½º¿¡°Ô ³Ö¾î ÁÝ´Ï´Ù(´Ù¸¥ ¸»·Î Çϸé, ÇÑ ¸í·É¾îÀÇ °á°ú¸¦ ´Ù¸¥ ¸í·É¾î¿¡°Ô Àü´ÞÇÕ´Ï´Ù).

¸í·É¾î ġȯ ÅÛÇø´

¼Ò°ýÈ£¿¡ µé¾î ÀÖ´Â ¸í·É¾î

>(command)

<(command)

ÀÌ·± ½ÄÀ¸·Î ÇÁ·Î¼¼½º ġȯÀ» ÃʱâÈ­Çϴµ¥, /dev/fd/<n> À̶ó°í ÇØ¼­ °ýÈ£¾È¿¡ ÀÖ´Â ÇÁ·Î¼¼½ºÀÇ °á°ú¸¦ ´Ù¸¥ ÇÁ·Î¼¼½º¿¡°Ô Àü´ÞÇØ ÁÝ´Ï´Ù. [1]

Âü°í: "<" ³ª ">" ¿Í ¼Ò°ýÈ£ »çÀÌ¿¡´Â ºó Ä­ÀÌ µé¾î °¡Áö ¾Ê½À´Ï´Ù. ºó Ä­ÀÌ µé¾î°¡¸é ¿¡·¯ ¸Þ¼¼Áö°¡ ³ª¿É´Ï´Ù.

bash$ echo >(true)
/dev/fd/63

bash$ echo <(true)
/dev/fd/63
	      
Bash´Â ÆÄÀÌÇÁ¸¦ ¸¸µé ¶§, --fIn°ú fOut--, µÎ °³ÀÇ ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ¾¹´Ï´Ù. trueÀÇ Ç¥ÁØÀÔ·ÂÀ» fOut(dup2(fOut, 0))À¸·Î ¿¬°áÇÏ°í ³ª¸é, Bash°¡ /dev/fd/fIn ÀÎÀÚ¸¦ echo·Î Àü´ÞÇØ ÁÝ´Ï´Ù. /dev/fd/<n> ÀÌ ¾ø´Â ½Ã½ºÅÛ¿¡¼­´Â Bash°¡ Àӽà ÆÄÀÏÀ» ¾µ °ÍÀÔ´Ï´Ù.(Thanks, S.C.)

cat <(ls -l)
# ls -l | cat ¿Í °°½À´Ï´Ù.

sort -k 9 <(ls -l /bin) <(ls -l /usr/bin) <(ls -l /usr/X11R6/bin)
# 3°³ÀÇ Áß¿äÇÑ 'bin' µð·ºÅ丮¾ÈÀÇ ÆÄÀÏ ¸ñ·ÏµéÀ» ÆÄÀÏ¸í ¼øÀ¸·Î Á¤·ÄÇØ¼­ º¸¿©ÁÝ´Ï´Ù.
# Áß¿äÇÑ °ÍÀº 3°³ÀÇ ±¸ºÐµÈ ¸í·É¾î°¡ 'sort'ÀÇ ÀÔ·ÂÀ¸·Î µé¾î°¡´Â °ÍÀÔ´Ï´Ù.


diff <(command1) <(command2)    # ¸í·É¾î Ãâ·Â¿¡¼­ ´Ù¸¥ Á¡À» º¸¿©ÁÝ´Ï´Ù.

tar cf >(bzip2 -c > file.tar.bz2) dir
# "tar cf /dev/fd/?? dir" ¸¦ ºÎ¸£°í, "bzip2 -c > file.tar.bz2" ¸¦ ºÎ¸¨´Ï´Ù.
#
# /dev/fd/<n> °¡ ½Ã½ºÅÛ¿¡ µû¸¥ Ư¡À̱⠶§¹®¿¡ µÎ ¸í·É¾î »çÀÌÀÇ
# ÆÄÀÌÇÁ°¡ ³×ÀÓµå ÆÄÀÌÇÁÀÏ ÇÊ¿ä´Â ¾ø½À´Ï´Ù
#
# À§¿¡¼­ Çß´ø °ÍÀ» ÀÌ·¸°Ô Èä³»¸¦ ³» º¸ÁÒ.
#
bzip2 -c < pipe > file.tar.bz2&
tar cf pipe dir
rm pipe
#        ÀÌ·¸°Ôµµ ÇÒ ¼ö Àְڳ׿ä.
exec 3>&1
tar cf /dev/fd/4 dir 4>&1 >&3 3>&- | bzip2 -c > file.tar.bz2 3>&-
exec 3>&-


# Thanks, S.C.

´ÙÀ½Àº µ¶ÀÚ ÇÑ ºÐÀÌ º¸³» ÁֽŠÇÁ·Î¼¼½º ġȯ¿¡ ´ëÇÑ Àç¹Õ´Â ¿¹Á¦ÀÔ´Ï´Ù.

# SuSE ¹èÆ÷ÆÇÀÇ ½ºÅ©¸³Æ® ÀϺκÐÀ» Àοë:

while read  des what mask iface; do
# ¸í·É¾î ¸î °³...
done < <(route -n)


# ½ÃÇèÇϱâ À§Çؼ­ ¸î °¡Áö¸¦ µ¡ºÙ¿© º¾½Ã´Ù.
while read  des what mask iface; do
  echo $des $what $mask $iface
done < <(route -n)

# Ãâ·Â:
# Kernel IP routing table
# Destination Gateway Genmask Flags Metric Ref Use Iface
# 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo


# S.C. °¡ ÁöÀûÇÑ °Íó·³, ÀÌÇØÇϱ⠽±°Ô ´Ù½Ã ¾²¸é:
route -n |
  while read des what mask iface; do   # ÆÄÀÌÇÁ Ãâ·ÂÀ» ½á¼­ º¯¼ö¸¦ ¼¼ÆÃ.
    echo $des $what $mask $iface
  done  # À§¿Í ¶È°°Àº °á°ú¸¦ º¸¿©ÁÝ´Ï´Ù.

ÁÖ¼®

[1]

ÀÌ·¸°Ô ÇÏ¸é ³×ÀÓµå ÆÄÀÌÇÁ(named pipe, Àӽà ÆÄÀÏ)¸¦ ¾²´Â °Í°ú °°°í, »ç½Ç ÇÁ·Î¼¼½º ġȯ¿¡¼­ ³×ÀÓµå ÆÄÀÌÇÁ°¡ ÇÑ ¹ø ¾²ÀÔ´Ï´Ù.