❯ fd -t d 1234
Case-1234_xxxxxxxxxx/
❯ fd -t d 1234 -x cd
❯ echo $?
0
❯ fd -t d 1234 -x cd {}
❯ echo $?
0
위와 같이 1234 키워드로 현재 디렉토리에서 1234 문자를 포함하는 디렉토리를 검색 및 이동하려는데,
실제로 이동이 되지 않고, 명령 프럼프트만 나오네요
❯ fd -t d 1234
Case-1234_xxxxxxxxxx/
❯ fd -t d 1234 -x cd
❯ echo $?
0
❯ fd -t d 1234 -x cd {}
❯ echo $?
0
위와 같이 1234 키워드로 현재 디렉토리에서 1234 문자를 포함하는 디렉토리를 검색 및 이동하려는데,
실제로 이동이 되지 않고, 명령 프럼프트만 나오네요
find ${PWD} -name '*1234*' -type d -exec cd {} \;
¶È°°Áö´Â ¾ÊÁö¸¸ ´ëÃæ ÀÌ·± ¸í·ÉÀÌ µÇ´Â °Í °°½À´Ï´Ù. Unix ½Ã½ºÅÛ ÇÁ·Î±×·¥À» ¾È Çغ¸¼ÌÀ¸¸é Àß ÀÌÇØ°¡ ¾ÈµÇ½Ç ¼öµµ ÀÖ½À´Ï´Ù. ÇöÀç µð·ºÅ丮¶ó´Â °ÍÀº °³º° ÇÁ·Î¼¼½º¸¶´Ù µû·Î Á¸ÀçÇÑ´Ù´Â °ÍÀ» ¾Æ¼Å¾ß ÇÕ´Ï´Ù. ½©¿¡ ÀÌ·± ¸í·ÉÀ» ÁÖ¸é ½©Àº fork syscall·Î ÀÚ±â ÀÚ½ÅÀ» º¹Á¦ÇÑ ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ Çϳª »ý¼ºÇÑ ÈÄ¿¡ exec syscall·Î find¸¦ ¼öÇàÇϵµ·Ï ÇÑ ´ÙÀ½¿¡ ³¡³ª±â¸¦ ±â´Ù¸³´Ï´Ù. ÀÚ½Ä ÇÁ·Î¼¼½º´Â ¿½ÉÈ÷ µð·ºÅ丮¸¦ µÚÁö¸é¼ Á¶°Ç¿¡ ¸Â´Â Ç׸ñÀ» ã¾Æ³À´Ï´Ù. ±×¸®°í ÁöÁ¤µÈ ¸í·ÉÀ» ¼öÇàÇÏ°Ô µÉÅÙµ¥, ¸¶Âù°¡Áö·Î fork/exec·Î ½©À» Çϳª ½ÇÇà½ÃÅ°¸é¼ ¼öÇàÇÒ ¸í·É¾î·Î -exec ¿É¼ÇÀ¸·Î ÁÖ¾îÁø ¸í·É(cd)À» ÁöÁ¤ÇÕ´Ï´Ù. ±×·¯¸é ±× ½©Àº ¸í·ÉÀ» ¼öÇàÇÏÇÏ°í, ¼öÇàÀ» ¸¶Ä¡¸é ½©ÀÇ ÇÁ·Î¼¼½º´Â Á¾·áµË´Ï´Ù. ÀÌ ÀÛ¾÷À» Çϴµ¥ 1) ½©(´ëÈÇü), 2) find À¯Æ¿, 3) ½© ÀÌ·¸°Ô 3°³ÀÇ ÇÁ·Î¼¼½º°¡ ÀÖ¾ú´Âµ¥, ±× Áß¿¡¼ µð·ºÅ丮°¡ ¹Ù²î´Â ÇÁ·Î¼¼½º´Â ½ÇÁ¦·Î cd¸¦ ¼öÇàÇÏ´Â 3¹ø ½© »ÓÀÔ´Ï´Ù. 1¹ø 2¹ø ÇÁ·Î¼¼½º´Â cd ¸í·É¿¡ ¾Æ¹«·± ¿µÇâÀ» ¹ÞÁö ¾Ê½À´Ï´Ù. ¾î¶² ÀÛ¾÷À» Çؼ °á°úÀûÀ¸·Î ÇöÀç ½©ÀÇ µð·ºÅ丮°¡ ¹Ù²î°Ô ÇÏ·Á¸é ÇöÀç ½©ÀÌ cd ¸í·ÉÀ» ¼öÇàÇϵµ·Ï ¸¸µé¾î¾ß ÇÕ´Ï´Ù. Àû´çÈ÷ ½© ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÏ°í ÇØ´ç ½ºÅ©¸³Æ®¸¦ source·Î ½ÇÇàÇÏ¸é µÉ°Ì´Ï´Ù.
Àú¶û È°µ¿ Ä¿¹Â´ÏƼ°¡ Á» °ãÄ¡½Ã´Â °Í °°³×¿ä. ´«¿¡ ÀÍÀº ´Ð³×ÀÓÀÔ´Ï´Ù. ±×·¡¼ µå¸®´Â ¸»¾¸Àε¥, Ä¿¹Â´ÏƼ¿¡¼ Àڱ⠱ñÝÇÑ °Í¸¸ Áú¹®Çؼ ¾Ë¾Æ°¡°í ±× ¿ÜÀÇ È°µ¿Àº ÀüÇô ¾ø´Ù¸é Áú¹®À» Çϼŵµ ´äÇÏ´Â »ç¶÷ÀÌ ÀÚ²Ù ÁÙ¾îµé °Í °°½À´Ï´Ù.
Áú¹®À» ÇÏ¸é ±×¿¡ ´ëÇÑ ´äÀ» ´Þ±â À§Çؼ ´äº¯ÀÚ´Â ¸Ó¸®¸¦ ¾²°í °øºÎ¸¦ Çϴϱî ÁÁÀº °ÍÀÌ°í
´äº¯¸¸ Àаí Áö¿ìÁö¸¸ ¾Ê´Â´Ù¸é ´©±º°¡ Áö³ª°¡´Ù°¡ ±ÛÀ» ÀÐ°í ¹è¿ï ¼ö ÀÖÀ¸´Ï ÁÁÀº °Ô ¾Æ´Ò±î¿ä?
"ü¸®¸¸ µû°¡´Â °Ç ¾Æ´Ï´Ù"¶ó´Â »ý°¢ÀÌ µé¾î¼¿ä.
Àü fd¸¦ ½á º¸Áöµµ ¾Ê¾ÒÁö¸¸, (Àúµµ find¸¦ ÁÖ·Î ¾¹´Ï´Ù. find¿¡¼ ³Ê¹« ±æ°Ô Ä¡´Â °Ô ±ÍÂú¾Æ¼ ½ºÅ©¸³Æ®·Î wrapper¸¦ ¸¸µé¾î¼ ¾²±âµµ Çß¾ú°í¿ä.)
À̹ø¿¡ »õ·Î ±ò¾Æº¸°í man pageµµ º¸°í °øºÎ¸¦ ÇÏ°Ô µÇ¾ú¾î¿ä. ±×¸®°í findº¸´Ù´Â °£´ÜÇÑ interface¿¡ ¾ÕÀ¸·Î À̰͵µ Á» ½á º¼±î ÇÏ´Â »ý°¢µµ µé¾ú°í¿ä.
±×·¯´Ï Á¦°Ôµµ µµ¿òÀÌ µÈ °ÅÁÒ.
Áú¹®¸¸ ÇÏ°í ´Ù¸¥ È°µ¿ ¾È ÇÑ´Ù°í ¹¹¶ó ÇϽñ⿡... ÀúÇÑÅ×µµ ÇØ´çÇÏ´Â ¸»Àΰ¡ ÇÏ´Â »ý°¢¿¡ ´ñ±Û¿¡ ´ëÇÑ ´ñ±ÛÀ» ´Þ°Ô µÇ¾ú½À´Ï´Ù.
Àúµµ ÁÖ·Î ´ñ±Û¸¸ ´ÞÁö °Ô½Ã±ÛÀº ¾ðÁ¦ ¿Ã·È´ÂÁö ±â¾ïµµ ¾È ³ª³×¿ä. °¡ÀÔ ÈÄ ÇѵΠ¹ø Á¤µµ ¿Ã·ÈÀ» °Ì´Ï´Ù.
½Ãºñ °Å´Â °Ç ¾Æ´Ï°í ±×³É Á¦°¡ Á» Âñ·Á¼ ÇѸ¶µð ¿Ã·Á º¾´Ï´Ù.
cd°¡ shell ³»Àå ¸í·ÉÀ¸·Î º°µµÀÇ cd¶ó´Â ½ÇÇà ÆÄÀÏÀÌ ¾ø¾î¼ ãÀ» ¼ö°¡ ¾ø´Ù°í ³ª¿Í¾ß Á¤»óÀÎ °Í °°°Åµç¿ä.
[fd error]: Command not found: "cd" "xxxxx" ÀÌ·± ½ÄÀÇ Ãâ·ÂÀÌ ³ª¿À³×¿ä. ±Ùµ¥ ½Å±âÇÑ°Ô echo $?´Â °á°ú°¡ 0ÀÔ´Ï´Ù.
¿¹¸¦ µé¾î, ls´Â ¸í·ÉÀ̴ϱî cdÀÚ¸®¿¡ ls¸¦ ³ÖÀ¸½Ã¸é ÇØ´ç µð·ºÅ丮ÀÇ ³»¿ëÀ» º¸¿©ÁÙ °Ì´Ï´Ù.
cd¸¦ ¹Ù·Î ÇϽ÷Á¸é cd `fd -t d xxxxx` °°Àº ½ÄÀÌ·Î backquote¸¦ »ç¿ëÇÏ½Ã¸é µÇ±ä ÇÕ´Ï´Ù.
µµ¿ò ÁֽŠºÐ ´ö¿¡ ¾Æ·¡¿Í °°ÀÌ, .zshrc¿¡ ¼³Á¤ÇÏ¿© ÆíÇÏ°Ô Áö³¾ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù.
function fcd() {
cd `/opt/homebrew/bin/fd -t d $1`
}
function fls() {
whence -f $1
}