Fish-shell: UTF-8 ๋กœ์ผˆ์€ DragonFly BSD, FreeBSD 11, 12์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 05์›” 21์ผ  ยท  60์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: fish-shell/fish-shell

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ค„์„ ๋„ฃ์œผ๋ฉด :
set LANG zh_CN.UTF-8
.config / fish / config.fish๋กœ
๋ช…๋ น์ด ์ž˜๋ชป๋˜๋ฉด ์–ด๋–ค ๋ฌธ์ž๋„ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด :

์ผ€์ดํŠธ

๋ช…๋ น 'cat'์˜ 'e'๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์–ด๋–ค ์บ๋ฆญํ„ฐ๋„ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค
2.2.0 ๋ฏธ๋งŒ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.


๋ฌผ๊ณ ๊ธฐ ๋ฒ„์ „ : ๋ฌผ๊ณ ๊ธฐ, ๋ฒ„์ „ 2.3.0

์šด์˜ ์ฒด์ œ : DragonFly testdf.com 4.4-RELEASE DragonFly v4.4.1.18.gc5db8-RELEASE # 0 : Thu Jan 28 15:02:10 CST 2016 [email protected] : / usr / obj / usr / src / sys / lhmwzy x86_64

ํ„ฐ๋ฏธ๋„ ๋˜๋Š” ํ„ฐ๋ฏธ๋„ ์—๋ฎฌ๋ ˆ์ดํ„ฐ : xterm

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด FreeBSD ๋ฒ„๊ทธ๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊นจ์ง„ ๊ตฌํ˜„์„ ์—ฌ์ „ํžˆ ํ•ด๊ฒฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  60 ๋Œ“๊ธ€

์–ด๋–ค ํ‚ค๋ฅผ ๋ˆ„๋ฅด์‹ญ๋‹ˆ๊นŒ? ์—ญํ–‰ ํ‚ค์ด?

์ด๊ฒƒ์ด ์‚ฌ์‹ค์ด๋ฉด bind -k backspace ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ๋‹ค์Œ ์˜ˆ๋ฅผ ๋“ค์–ด script (๋˜๋Š” bash๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ctrl + v๋ฅผ ๋ˆ„๋ฆ„)๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ์‹œํ€€์Šค๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ „์†กํ•ฉ๋‹ˆ๋‹ค. (์Šคํฌ๋ฆฝํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ด๋‹น ์„ธ์…˜์˜ ์ „์ฒด ์ถœ๋ ฅ์„ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ "typescript"๋ผ๋Š” ํŒŒ์ผ์— ๋„ฃ์Šต๋‹ˆ๋‹ค). Xterm์€ "cH"๋ฅผ ๋ณด๋‚ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ๋ฐฑ ์ŠคํŽ˜์ด์Šค๋กœ ์„ ํƒํ•ด์•ผํ•˜๋Š”์ง€ (terminfo๋ฅผ ํ†ตํ•ด _needs_ $ TERM์„ ์„ค์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค).

๋ฏธ๋ž˜์˜ ๋ฌผ๊ณ ๊ธฐ ๋ฒ„์ „์€ "fish_key_reader"๋ผ๋Š” ์ž‘์€ ๋„์šฐ๋ฏธ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๊ฒƒ์„ ๋‹ค์†Œ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

$ TERM์€ ๋ฌด์—‡์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ? "xterm"?

ํ‚ค๋Š” ๋ฐฑ ์ŠคํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.
์ €์—๊ฒŒ ์šฐํŽธ๋ฌผ์„ ๋ณด๋‚ด ์ฃผ์‹œ๋ฉด ์ œ ์ƒ์ž์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด์œ ๋ฅผ ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ‚ค๋Š” ๋ฐฑ ์ŠคํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

ํ‚ค์˜ ๋ ˆ์ด๋ธ”์€ ๋ณด๋‚ด๋Š” ๋ฌธ์ž ์‹œํ€€์Šค๋ฅผ ์•Œ๋ ค์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. git ์ €์žฅ์†Œ์—์„œ ๊ฐ€์ ธ์˜จ ์†Œ์Šค์—์„œ fish๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? make fish_key_reader ๋‹ค์Œ์— ./fish_key_reader ๋ฅผ ์ž…๋ ฅ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋ฐฑ ์ŠคํŽ˜์ด์Šค ํ‚ค๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค. xxd ๋˜๋Š” od -tx1z ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ ๋ฐฑ ์ŠคํŽ˜์ด์Šค ํ‚ค์™€ [ctrl-D]๋ฅผ ์ฐจ๋ก€๋กœ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค. ๋˜ํ•œ bind -k backspace ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ์„ธ์š”. echo $TERM ๋„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ฑ…์ž„ ์ด์œ ์™€ ์ค‘๊ตญ์–ด๋ฅผ ์ฝ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ์— ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ set LANG zh_CN.UTF-8 ์€ (๋Š”) ์ž‘์—…ํ•˜๊ธฐ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

./fish_key_reader
999999 usec dec : 8 hex : 8 char : b (์ผ๋ช… cH)
์ฐธ๊ณ  : ๋ฐ”์ธ๋“œ ํ‚ค ์ด๋ฆ„ "๋ฐฑ ์ŠคํŽ˜์ด์Šค"์— ๋Œ€ํ•œ ์‹œํ€€์Šค๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

bind -k ๋ฐฑ ์ŠคํŽ˜์ด์Šค
bind : '๋ฐฑ ์ŠคํŽ˜์ด์Šค'ํ‚ค์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ์ด ์—†์Šต๋‹ˆ๋‹ค.

์—์ฝ” $ TERM
xterm

bind : '๋ฐฑ ์ŠคํŽ˜์ด์Šค'ํ‚ค์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ข‹์•„์š”, ๊ทธ๊ฒŒ ๋‹น์‹  ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

bind -k backspace backward-delete-char

์ด๊ฒƒ์ด LANG ๋ณ€์ˆ˜ ์„ค์ •๊ณผ ์–ด๋–ป๊ฒŒ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋“  ๊ธฐ๋ณธ ํ‚ค ๋ฐ”์ธ๋”ฉ์„ ์žฌ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. _ ~ / .config / fish / _ ** ํŒŒ์ผ์—์„œ "bind"๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์–ธ๊ธ‰ ๋œ ๊ฒƒ์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ด€๋ฆฌ์ž (์˜ˆ : fisherman ๋˜๋Š” oh-my-fish)๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๊ฑฐ๋‚˜์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด์žˆ์„ ์ˆ˜์žˆ๋Š” ๋‹ค๋ฅธ ํƒ€์‚ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„ค์น˜ ํ–ˆ์Šต๋‹ˆ๊นŒ?

ํ™•์ธ.
~ / .config / fish /์—๋Š” 3 ๊ฐœ์˜ ํŒŒ์ผ ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค

cat config.fish
set LANG zh_CN.UTF-8
cat fishd.lhmtestdf.com 
# This file is automatically generated by the fish.
# Do NOT edit it directly, your changes will be overwritten.
SET __fish_init_1_50_0:\x1d
SET __fish_init_2_3_0:\x1d
SET fish_color_autosuggestion:555\x1eyellow
SET fish_color_command:005fd7\x1epurple
SET fish_color_comment:red
SET fish_color_cwd:green
SET fish_color_cwd_root:red
SET fish_color_end:green
SET fish_color_error:red\x1e\x2d\x2dbold
SET fish_color_escape:cyan
SET fish_color_history_current:cyan
SET fish_color_host:normal
SET fish_color_match:cyan
SET fish_color_normal:normal
SET fish_color_operator:cyan
SET fish_color_param:00afff\x1ecyan
SET fish_color_quote:brown
SET fish_color_redirection:normal
SET fish_color_search_match:\x2d\x2dbackground\x3dpurple
SET fish_color_selection:\x2d\x2dbackground\x3dpurple
SET fish_color_user:green
SET fish_color_valid_path:\x2d\x2dunderline
SET fish_greeting:Welcome\x20to\x20fish\x2c\x20the\x20friendly\x20interactive\x20shell\x0aType\x20\x1b\x5b32mhelp\x1b\x5b30m\x1b\x28B\x1b\x5bm\x20for\x20instructions\x20on\x20how\x20to\x20use\x20fish
SET fish_key_bindings:fish_default_key_bindings
SET fish_pager_color_completion:normal
SET fish_pager_color_description:555\x1eyellow
SET fish_pager_color_prefix:cyan
SET fish_pager_color_progress:cyan

๋ฌผ๊ณ ๊ธฐ -2.2.0์—์„œ
๋ช…๋ น bind ์ถœ๋ ฅ :

bind '' self-insert
bind \n execute
bind \ck kill-line
bind \cy yank
bind \t complete
bind \e\n commandline\ -i\ \\n
bind \e\[A up-or-search
bind \e\[B down-or-search
bind -k down down-or-search
bind -k up up-or-search
bind \e\[C forward-char
bind \e\[D backward-char
bind -k right forward-char
bind -k left backward-char
bind -k dc delete-char
bind -k backspace backward-delete-char
bind backward-delete-char
bind \e\[H beginning-of-line
bind \e\[F end-of-line
bind \e\[1\~ beginning-of-line
bind \e\[4\~ end-of-line
bind -k home beginning-of-line
bind -k end end-of-line
bind -k sdc backward-delete-char
bind \e\eOC nextd-or-forward-word
bind \e\eOD prevd-or-backward-word
bind \e\e\[C nextd-or-forward-word
bind \e\e\[D prevd-or-backward-word
bind \eO3C nextd-or-forward-word
bind \eO3D prevd-or-backward-word
bind \e\[3C nextd-or-forward-word
bind \e\[3D prevd-or-backward-word
bind \e\[1\;3C nextd-or-forward-word
bind \e\[1\;3D prevd-or-backward-word
bind \e\eOA history-token-search-backward
bind \e\eOB history-token-search-forward
bind \e\e\[A history-token-search-backward
bind \e\e\[B history-token-search-forward
bind \eO3A history-token-search-backward
bind \eO3B history-token-search-forward
bind \e\[3A history-token-search-backward
bind \e\[3B history-token-search-forward
bind \e\[1\;3A history-token-search-backward
bind \e\[1\;3B history-token-search-forward
bind \ca beginning-of-line
bind \ce end-of-line
bind \ey yank-pop
bind \cw backward-kill-path-component
bind \cp history-search-backward
bind \cn history-search-forward
bind \cf forward-char
bind \cb backward-char
bind \ct transpose-chars
bind \et transpose-words
bind \eu upcase-word
bind \ec capitalize-word
bind \ backward-kill-word
bind \eb backward-word
bind \ef forward-word
bind \e\[1\;5C forward-word
bind \e\[1\;5D backward-word
bind \e\[1\;9A history-token-search-backward
bind \e\[1\;9B history-token-search-forward
bind \e\[1\;9C forward-word
bind \e\[1\;9D backward-word
bind \e. history-token-search-backward
bind -k ppage beginning-of-history
bind -k npage end-of-history
bind \e\< beginning-of-buffer
bind \e\> end-of-buffer
bind \el __fish_list_current_token
bind \ew 'set tok (commandline -pt); if test $tok[1]; echo; whatis $tok[1]; commandline -f repaint; end'
bind \cl 'clear; commandline -f repaint'
bind \cc 'commandline ""'
bind \cu backward-kill-line
bind \ed kill-word
bind \cd delete-or-exit
bind -k f1 __fish_man_page
bind \eh __fish_man_page
bind \ep __fish_paginate
bind -k btab complete-and-search
bind \e cancel
bind \e\[I 'begin;end'
bind \e\[O 'begin;end'

๊ทธ๋Ÿฌ๋‚˜ fish-2.3.0์—์„œ ๋ช…๋ น bind ์ถœ๋ ฅ :

bind '' self-insert
bind \n execute
bind \r execute
bind \t complete
bind \cc 'commandline ""'
bind \cd exit
bind \ce bind

๋ฌผ๊ณ ๊ธฐ 2.3.0์„ ์–ด๋–ป๊ฒŒ ์„ค์น˜ ํ–ˆ์Šต๋‹ˆ๊นŒ? ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฐพ์„ ์ˆ˜์—†๋Š” ๋ฌผ๊ณ ๊ธฐ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‹คํ–‰์ค‘์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜์—์„œ

git clone
autoconf
configure
gmake
gmake install

์ข‹์•„, ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ธ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์€ ๋ฌด์—‡์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๊นŒ?

echo $__fish_active_key_bindings
echo $fish_function_path

ํ•จ์ˆ˜ ๊ฒฝ๋กœ ๋””๋ ‰ํ† ๋ฆฌ ์ค‘ ํ•˜๋‚˜์— _fish_default_key_bindings.fish_๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ (์ผ๋ฐ˜์ ์œผ๋กœ ๋‚˜์—ด๋œ ๋งˆ์ง€๋ง‰ ๋””๋ ‰ํ† ๋ฆฌ)? functions fish_default_key_bindings ์ด ๋ฌด์—‡์„ ์ถœ๋ ฅํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์ถœ๋ ฅ์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ ๋„ฃ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋‚˜ _fish_default_key_bindings.fish_ ํŒŒ์ผ์—์žˆ๋Š” ๊ฒƒ๊ณผ ์ผ์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ‚ค ๋ฐ”์ธ๋”ฉ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•จ์ˆ˜ ๊ฒฝ๋กœ var์— ๋‚˜์—ด๋œ ๋””๋ ‰ํ† ๋ฆฌ ์ค‘ ํ•˜๋‚˜์— ์žˆ์–ด์•ผํ•˜๋Š” ___ fish_config_interactive.fish_ ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

.config / fish / config.fish๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ set LANG zh_CN.UTF-8 ๋ฌธ์ž์—ด์„ .config / fish / config.fish ๋˜๋Š” /usr/local/etc/fish/config.fish์— ๋„ฃ์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

echo $__fish_active_key_bindings ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

echo $fish_function_path ์ถœ๋ ฅ :
/home/lhm/.config/fish/functions /usr/local/etc/fish/functions /usr/local/share/fish/vendor_functions.d /usr/local/share/fish/functions

.config / fish / config.fish๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ /usr/local/etc/fish/config.fish์˜ ๋ชจ๋“  ์ค„์— ์ฃผ์„์„ ๋‹ฌ๋ฉด ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

echo $__fish_active_key_bindings ์ถœ๋ ฅ :
fish_default_key_bindings

echo $fish_function_path ์ถœ๋ ฅ :
/home/lhm/.config/fish/functions /usr/local/etc/fish/functions /usr/local/share/fish/vendor_functions.d /usr/local/share/fish/functions

fish_default_key_bindings.fish ํŒŒ์ผ์€ /usr/local/share/fish/functions/fish_default_key_bindings.fish์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๊ณ ๊ธฐ๊ฐ€ ํ‚ค ๋ฐ”์ธ๋”ฉ์„ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋Š” __fish_config_interactive (๋ฐ”์ธ๋”ฉ ์„ค์ • ํฌํ•จ)๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ (์ฒซ ๋ฒˆ์งธ ํ”„๋กฌํ”„ํŠธ ๋ฐ”๋กœ ์•ž์— ์žˆ์–ด์•ผ ํ•จ) $ fish_key_bindings๊ฐ€ ๋น„์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค (๊ฐ’์ด ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉด ๊ธฐ๋ณธ ๋ฐ”์ธ๋”ฉ์œผ๋กœ ๋˜๋Œ๋ ค ์•ผํ•ฉ๋‹ˆ๋‹ค. ์œ ํšจํ•˜์ง€).

$ LANG ์„ค์ •์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฏ€๋กœ ์ธ์ฝ”๋”ฉ ๋ฌธ์ œ๋ฅผ ๊ฐ€๋ฆฌ ํ‚ต๋‹ˆ๋‹ค.

github๊ฐ€ ์ธ์ฝ”๋”ฉ์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ตฌ์„ฑ ํŒŒ์ผ๊ณผ fishd ํŒŒ์ผ์€ ๊นจ๋—ํ•œ ํ˜•ํƒœ๋กœ ๋ฉ‹์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ config.fish์—์„œ ์„ค์ •ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ $ LANG ๊ฐ’์€ ์–ผ๋งˆ์ž…๋‹ˆ๊นŒ? (ASCII์™€ ํ˜ธํ™˜๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์šฐ๋ฆฌ ์ž์‹ ์˜ ํŒŒ์ผ์„ ์ฝ์„ ์ˆ˜๋„ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๋‹น์‹ ์€ ๊ฒฐ์ฝ” ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค)

_config.fish_์— set LANG zh_CN.UTF-8 ์„ (๋ฅผ) ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. @faho๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฌผ๊ณ ๊ธฐ ํŒŒ์ผ์€ UTF-8๋กœ ์ธ์ฝ”๋”ฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. file /usr/local/share/fish/functions/__fish_config_interactive.fish ๋Š” ๋ฌด์—‡์„๋ณด๊ณ ํ•ฉ๋‹ˆ๊นŒ? "ASCII ํ…์ŠคํŠธ"๋ผ๊ณ  ํ‘œ์‹œ๋˜๋ฉด LANG ์ค„์„ ์ถ”๊ฐ€ ํ•œ ๋‹ค์Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒˆ ์…ธ์„ ์‹œ์ž‘ํ•˜์—ฌ ๋””๋ฒ„๊น… ์ถœ๋ ฅ์„ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.

fish -d5
exit
exit

๊ทธ๋Ÿฐ ๋‹ค์Œ _typescript_ ํŒŒ์ผ์„์ด ๋ฌธ์ œ์— ์ฒจ๋ถ€ํ•˜์‹ญ์‹œ์˜ค.

file /usr/local/share/fish/functions/__fish_config_interactive.fish
/usr/local/share/fish/functions/__fish_config_interactive.fish: ASCII text

cat typescript output:
Script started on Mon May 23 07:34:02 2016
@ ~/home/lhm> /usr/local/bin/fish -d5
@ ~/home/lhm> exit

@ ~/home/lhm> exit

๋„๋Œ€์ฒด? fish -d5 ๊ฐ€ ์‰˜ ํ”„๋กฌํ”„ํŠธ ์™ธ์—๋Š” ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๋ง์ž…๋‹ˆ๊นŒ? ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งŽ์€ ์ถœ๋ ฅ์„ ์–ป์—ˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

fish: Continue job 1, gid 0 (fish_title), COMPLETED, NON-INTERACTIVE
fish: proc::read_try('fish_title')
fish: io_buffer_t::read: blocking read on fd 3

DragonFly๋Š” https://www.dragonflybsd.org/์— ๋Œ€ํ•œ ์ฐธ์กฐ set LANG C ๋˜๋Š” set LANG en_US.UTF-8 ์ด๋ฉด ์–ด๋–ป๊ฒŒ๋ฉ๋‹ˆ๊นŒ?

์˜ˆ, https://www.dragonflybsd.org/ ๋Š” ํ”„๋กœ์ ํŠธ ํ™ˆ ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค.
๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž์‹ ์†Œ์Šค์—์„œ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

git clone
autoconf
configure
gmake
gmake install

์„ค์ •๋œ LANG C ๋งŒ fish -d5 ํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<2> fish: sourcing /usr/local/share/fish/config.fish
<4> fish: Exec job 'builtin source /usr/local/share/fish/config.fish' with id 1
<4> fish: Exec job 'set -g IFS \n\ \t' with id 2
<3> fish: Skipping fork: no output for internal builtin 'set'
<3> fish: Set status of set -g IFS \n\ \t to 0 using short circuit
<3> fish: Job is constructed
<4> fish: Continue job 2, gid 0 (set -g IFS \n\ \t), COMPLETED, NON-INTERACTIVE
<4> fish: Exec job 'status --is-interactive' with id 2
<3> fish: Skipping fork: no output for internal builtin 'status'
<3> fish: Set status of status --is-interactive to 0 using short circuit
<3> fish: Job is constructed
<4> fish: Continue job 2, gid 0 (status --is-interactive), COMPLETED, NON-INTERACTIVE
<4> fish: Exec job 'not set -q NVIM_LISTEN_ADDRESS' with id 2
<3> fish: Skipping fork: no output for internal builtin 'set'
<3> fish: Set status of not set -q NVIM_LISTEN_ADDRESS to 1 using short circuit
<3> fish: Job is constructed
<4> fish: Continue job 2, gid 0 (not set -q NVIM_LISTEN_ADDRESS), COMPLETED, NON-INTERACTIV

set LANG en_US.UTF-8 ๋Š” set LANG zh_CN.UTF-8 ์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ์ด๋ฉฐ ์…ธ ํ”„๋กฌํ”„ํŠธ ์™ธ์—๋Š” ์ถœ๋ ฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ DF 4.4 ์ƒ์ž

/usr/local/bin/fish -d5
There is no fish_key_bindings function called: 'fish_default_key_bindings'
Reverting to default bindings
There is no fish_key_bindings function called: 'fish_default_key_bindings'
Reverting to default bindings
There is no fish_key_bindings function called: 'fish_default_key_bindings'
Reverting to default bindings
There is no fish_key_bindings function called: 'fish_default_key_bindings'
Reverting to default bindings
There is no fish_key_bindings function called: 'fish_default_key_bindings'
Reverting to default bindings
There is no fish_key_bindings function called: 'fish_default_key_bindings'
Reverting to default bindings
There is no fish_key_bindings function called: 'fish_default_key_bindings'
Reverting to default bindings

fish-2.2.0์€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์ข‹์•„, fish์™€ DragonFly ์™€์ด๋“œ char ํ•จ์ˆ˜ ์‚ฌ์ด์—๋Š” ๋ถ„๋ช…ํžˆ ๋น„ ํ˜ธํ™˜์„ฑ์ด ์žˆ๊ฑฐ๋‚˜ ํ›„์ž์˜ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋งŒ๋“ค๊ณ  ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜์žˆ๋Š” DragonFly 4.3 ์‹œ์Šคํ…œ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํ•ต์‹ฌ ๋ณ€๊ฒฝ ์ธ DragonFly 4.4 ๋กœ์ผ€์ผ ์ง€์›์— ๋„์ž… ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ธ์ง€ ํ™•์ธํ•˜์—ฌ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

4.2-RELEASE DragonFly ์ƒ์ž์—์„œ ์ตœ์‹  ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

cat .config/fish/config.fish 
set -gx LANG zh_CN.UTF-8

locale
LANG="zh_CN.UTF-8"
LC_CTYPE="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_ALL=""


/usr/local/bin/fish -v
fish, version 2.3.0-162-g85e701f

uname -a
DragonFly . 4.2-RELEASE DragonFly v4.2.4-RELEASE #6: Sun Aug  9 13:25:14 EDT 2015     [email protected]:/usr/obj/home/justin/release/4_2/sys/X86_64_GENERIC  x86_64

์ข‹์Šต๋‹ˆ๋‹ค. DragonFly ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ๊ทธ๋“ค์˜ ์ฝ”๋“œ์— ๊ฒฐํ•จ์ด ์žˆ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์€ ์™œ mbrtowc() ๋ฐ wcrtomb() ์™€ ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ์˜ˆ์ƒ ๋œ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœํ•˜์ง€ ์•Š๋Š”์ง€์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๊ฐ€์ง€๊ณ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ด ํ–‰๋™์ด ๋ฌผ๊ณ ๊ธฐ์—๊ฒŒ๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฐ€๋Šฅ์„ฑ์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ชจ๋“  UTF-8 ๋กœ์ผ€์ผ (์˜ˆ : en_AU.UTF-8 )๋กœ DragonFly BSD 4.5-DEVELOPMENT์—์„œ๋„ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฟก ๋นต๋€จ
๊ทธ๋ž˜์„œ, mbrtowc () ๋ฐ wcrtomb () ํ•จ์ˆ˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์•Œ๋ ค์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ข‹์Šต๋‹ˆ๋‹ค. DragonFly ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋ฌธ์˜ํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ๊ทธ๋“ค์˜ ์ฝ”๋“œ์— ๊ฒฐํ•จ์ด ์žˆ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์€ ์™œ mbrtowc () ๋ฐ wcrtomb ()์™€ ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ์˜ˆ์ƒ ๋œ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœํ•˜์ง€ ์•Š๋Š”์ง€์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๊ฐ€์ง€๊ณ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ด ํ–‰๋™์ด ๋ฌผ๊ณ ๊ธฐ์—๊ฒŒ๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฐ€๋Šฅ์„ฑ์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ, mbrtowc () ๋ฐ wcrtomb () ํ•จ์ˆ˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์•Œ๋ ค์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ œ์•ˆํ•˜๋ ค๊ณ ํ–ˆ๋‹ค

$ gmake fish_tests
$ ./fish_tests convert

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์‹คํŒจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ./fish_tests ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜์ง€๋งŒ์ด ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค.

DragonFly 4.4.3์„ ์„ค์น˜ํ•˜๊ณ  git head์—์„œ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋งŒ๋“ค๊ณ  ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด _config.fish_์—์„œ set -x LANG en_US.UTF-8 ๋กœ ์ƒ์„ ์„ ์‹œ์ž‘ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

alias: Name cannot be empty
There is no fish_key_bindings function called: 'fish_default_key_bindings'
Reverting to default bindings

๋‹น์—ฐํžˆ bind ๋Š” ๊ธฐ๋ณธ ๋ฐ”์ธ๋”ฉ์ด ์ตœ์†Œ์ด๋ฏ€๋กœ ํ‚ค ๋ฐ”์ธ๋”ฉ์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. locale ๋ช…๋ น์€ ๋ช…์‹œ ์ ์œผ๋กœ en_US.UTF-8 ์„ค์ •ํ•  ๋•Œ๊นŒ์ง€ C ๋ณด๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ „์ž๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ ํ›„์ž๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ๊ธฐ๋ณธ ๋กœ์ผ€์ผ์ด "en_US.UTF-8"์ด ์•„๋‹ˆ๋ผ "C"๋ผ๋Š” ์‚ฌ์‹ค์€ ๋†€๋ž์Šต๋‹ˆ๋‹ค. ์ด๋Š” DragonFly ๊ฐœ๋ฐœ์ž๊ฐ€ UTF-8 ์ง€์›์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ์ธ์‹ํ•˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ฐ ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์•  ํ•  ์ˆ˜๋„ ์žˆ๊ณ ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. DragonFly ๊ด€๋ฆฌ์ž๊ฐ€์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณต ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ๋ถ„์ด ์ด์•ผ๊ธฐ ํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

fwprintf ํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ DragonFly BSD ์œ ํ˜•์— ๋Œ€ํ•ด ๋ฌผ์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์–ด๋–ค ํŒจ์น˜๋ฅผ ์‹œํ—˜ํ•˜๊ฒŒ๋˜์–ด ๊ธฐ์  ๊ฒƒ์ด๋‹ค.

DragonFly BSD ๋ฉ”์ผ ๋ง๋ฆฌ์ŠคํŠธ์—์„œ Romick์€ ๋‹ค์Œ๊ณผ

ํ”ผ์‰ฌ ์‰˜๋กœ ํŒŒ์„œ๋ฅผ ์‚ดํŽด ๋ณด์•˜๊ณ , ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์—์„œ ์ง์ ‘ ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ BRACKET_BEGIN, BRACKET_END, BRACKET_SEP, INTERNAL_SEPARATOR ๋“ฑ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ํ•ญ๋ชฉ์„ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ž๊ฐ€ ์•ŒํŒŒ๋ฒณ์˜ ์ „์ฒด ๊ตฌ์„ฑ์› ์ธ ๋กœ์ผ€์ผ์„ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
์œ ๋‹ˆ ์ฝ”๋“œ ๋ฒ”์œ„๋Š” 0x0์—์„œ 0x10FFFF์ด๊ณ  ๋ฌธ์ž INTERNAL_SEPARATOR์˜ ์ฝ”๋“œ๋Š” 0xFDD7์ž…๋‹ˆ๋‹ค.

DragonFly์—์„œ BSD ํ•จ์ˆ˜ iswalnum ()์€ ๋ชจ๋“  ๋กœ์ผ€์ผ์„ ๋™์‹œ์— ํ™•์ธํ•˜๋ฏ€๋กœ
์„ธ ๊ฐ€์ง€ ์„ ํƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
1) ์ž์‹ ์˜ iswalnum () ์‚ฌ์šฉ :

diff --git a/src/common.h b/src/common.h
index e59dfc0..e8c01c3 100644
--- a/src/common.h
+++ b/src/common.h
@@ -769,4 +769,8 @@ __attribute__((noinline)) void debug_thread_error(void);
 /// specified base, return -1.
 long convert_digit(wchar_t d, int base);

+inline int iswalnum(wchar_t chr) {
+ return((chr >= L'a' && chr <= L'z') || (chr >= L'A' && chr <= L'Z') || iswdigit(chr));
+}
+
 #endif

2) ํŠน์ˆ˜ ๋ฌธ์ž์— ๋” ํฐ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค (๋‚˜๋Š” ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค).

3) ๋‹ค๋ฅธ ๊ฒƒ :)

๊ทธ ๊ฐœ์ธ์ด ์œ ๋‹ˆ ์ฝ”๋“œ์— ๋Œ€ํ•ด ์•„๋Š” ๊ฒƒ์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ "ํŠน์ˆ˜ ๋ฌธ์ž"๋Š” ์˜์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒƒ์œผ๋กœ ์ •์˜ ๋œ ๊ฐœ์ธ ์‚ฌ์šฉ ์˜์—ญ ๋ฌธ์ž์ž…๋‹ˆ๋‹ค : https://en.wikipedia.org/wiki/Unicode_character_property#General_Category. ๋‚˜๋Š” ์ด๊ฒƒ์„ OS X, Linux ๋ฐ DragonFly์—์„œ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„ธ ๊ฐ€์ง€ ๋ชจ๋‘ iswalnum(INTERNAL_SEPARATOR) ๋Œ€ํ•ด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ fwprintf ()์™€ ๊ฐ™์€ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๊ฒƒ์ด ์™œ ๊ด€๋ จ์„ฑ์ด ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ •๋ง ๋ฉ‹์ง„ ์ถ•์†Œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค @zanchey!

DragonflyBSD๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์•ผ๊ฐ„ ISO์™€ 4.4.3 ๋ฆด๋ฆฌ์Šค ISO (Virtualbox ์‚ฌ์šฉ)๋กœ ์‹œ๋„ํ–ˆ์ง€๋งŒ fwprintf ์ถ•์†Œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ๋‚˜๋Š” ๋˜ํ•œ 4.4.3์—์„œ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  ์•Œ๋ฆผ ํ…Œ์ŠคํŠธ๋ฅผ ์ œ์™ธํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋„ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” SSH๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์‹คํŒจํ•˜๋ฉฐ VirtualBox์˜ ์‹œ์Šคํ…œ ์ฝ˜์†”์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์˜ค ์™€์šฐ. Vagrant๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ๋‹จ์ˆœํ•œ VirtualBox 5.0.20์ž…๋‹ˆ๋‹ค.

# 3406์„ ์ค‘๋ณต์œผ๋กœ ๋‹ซ์€ ํ›„ ์†Œ์œ ๊ถŒ์„ ๊ฐ€์ ธ๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. FreeBSD๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์‹œ๊ฐ„์„ ์ฐพ๊ณ  ์„ฑ๊ณตํ•˜๋ฉด ์ถ”๊ฐ€๋กœ ๋””๋ฒ„๊ทธ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@lhmwzy ์ด๊ฒƒ์€ ์•„๋งˆ๋„ # 3406๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ๋‚˜๋Š” ํ›„์ž์˜ ๋ฌธ์ œ๋ฅผ ์–‘๋ถ„ํ•˜๊ณ  ์ถ”์ ํ•˜์—ฌ f2246dfb343bea19beb176fb2cc534f85513b2eb๋ฅผ ์ปค๋ฐ‹ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์—…๋ฐ์ดํŠธ์—์„œ # 3406 ํ˜ธ๊นŒ์ง€ (์ง€๊ธˆ์€ DragonFly BSD๊ฐ€ ์•„๋‹Œ FreeBSD 12๋กœ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค) :

์ฐธ๊ณ ๋กœ FreeBSD 12๋ฅผ ์„ค์น˜ํ–ˆ๊ณ ์ด ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‚ค๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๊ธฐ๋ณธ ํ‚ค ๋ฐ”์ธ๋”ฉ์ด UTF-8 ๋กœ์ผ€์ผ๋กœ ์„ค์ •๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Reverting to default bindings
The function call stack limit has been exceeded. Do you have an accidental infinite loop?
fish: __fish_reload_key_bindings VARIABLE SET fish_key_bindings
      ^
in event handler: handler for variable 'fish_key_bindings'

alias: Name cannot be empty ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ git checkout f2246df~ ๊ฑด๋ฌผ์— ๋ฌธ์ œ๊ฐ€ ์—†์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋ณ€ํ™”์˜ ์ €์ž๋กœ์„œ ์ €์—๊ฒŒ ๋งค์šฐ ๋†€๋ž์Šต๋‹ˆ๋‹ค.

ํ–‰๋™์ด ๊ฐˆ๋ผ์ง„ ์ปค๋ฐ‹์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๊ฒŒ ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€๋Š” ๋ถ„๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ณ„์นญ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์€ ๋น„์›Œ ๋‘˜ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@ krader1961 : ์ด๊ฒƒ์€ ๊ฐ™์Šต๋‹ˆ๋‹ค . ๋ณ€์ˆ˜ ๋งŒ์žˆ๋Š” ๋”ฐ์˜ดํ‘œ๋Š” ๋นˆ ์ธ์ˆ˜๋กœ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.์ด ์˜ค๋ฅ˜๋Š” ๋ณ„์นญ์ด test -z "$name" ์‹คํŒจ ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@faho , ์˜ˆ, ๋ณ„์นญ ํ•จ์ˆ˜ ์‹คํŒจ๋ฅผ ๋””๋ฒ„๊น…ํ•˜๊ณ  ๋™์ผํ•œ ๊ฒฐ๋ก ์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ด๋Ÿฌํ•œ ๋ชจ๋“  BSD ์ฆ์ƒ์„ ์„ค๋ช…ํ•˜๋“  ๊ทธ๋ ‡์ง€ ์•Š๋“  ํฐ ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด์€ ์œ ๋‹ˆ ์ฝ”๋“œ ์˜ˆ์•ฝ ๋ฌธ์ž ๋ฒ”์œ„์—์žˆ๋Š” ๋‚ด๋ถ€ ํ† ํฐ VARIABLE_EXPAND_SINGLE ์ค‘ ํ•˜๋‚˜๋ฅผ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๊นŠ์ด ํŒŒํ—ค ์น˜๊ธฐ์— ์ข‹์€ ์žฅ์†Œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ๋””๋ฒ„๊ทธ ๋ฌธ์„ ์ถ”๊ฐ€ํ–ˆ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  isw...() ํ•จ์ˆ˜ (์˜ˆ : iswalnum() )๋Š” FreeBSD 12์˜ ๋‚ด๋ถ€ ํ† ํฐ์— ๋Œ€ํ•ด ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ @zanchey ์—๊ฒŒ

์‚ฌ์‹ค, BSD์˜ UTF-8 ๋กœ์ผ€์ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ํฐ ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๋ฌธ์ž์—ด ๋ฌธ์ œ ๋‚ด์—์„œ var ํ™•์žฅ์„ ๋งค์šฐ ์‰ฝ๊ฒŒ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ set wtf b
$ echo a "$wtf" c
a  c
$ echo "a $wtf c"
a b c
$ echo "a $wtf"
a
$ echo "$wtf c"
b c

ํฐ ๋”ฐ์˜ดํ‘œ๋กœ var ์ฐธ์กฐ๋ฅผ ๋๋‚ผ ๋•Œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ๋” ๊นŠ์ด ํŒŒํ—ค์น  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ๋ชจ๋“  ์˜ˆ์ œ๋Š” LC_ALL = C์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ช‡ ์‹œ๊ฐ„ ์ „์— FreeBSD์—์„œ iswalnum() ์ •๋‹ต์„ ๋ฐ˜ํ™˜ํ–ˆ๋‹ค๊ณ  ๋งํ–ˆ์„ ๋•Œ ์ €๋Š” ํ‹€ ๋ ธ์Šต๋‹ˆ๋‹ค. setlocale("") ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „์— ๋””๋ฒ„๊น… ์ถœ๋ ฅ์—์„œ โ€‹โ€‹ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์‹ค์ˆ˜๋กœ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋””๋ฒ„๊ทธ ์ธ์‡„๋ฅผ ์ด๋™ํ•˜๋ฉด 0xFDD0์—์„œ ์‹œ์ž‘ํ•˜๋Š” 32 ์ฝ”๋“œ ํฌ์ธํŠธ ๋ธ”๋ก์ด iswalnum() ๋ฐ iswgraph() ๊ฐ€ FreeBSD์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์ธ 0์ด ์•„๋‹Œ 1์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ GNU๊ฐ€ ์•„๋‹Œ ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด GNU๋Š” 0xF600์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๊ฐœ์ธ์šฉ ๋ฌธ์ž์— ๋Œ€ํ•ด iswgraph() ๋Œ€ํ•ด 1์„ ์ž˜๋ชป ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ FreeBSD๋Š” 0์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํ”Œ๋žซํผ์— ๊ด€๊ณ„์—†์ด ์˜ฌ๋ฐ”๋ฅธ ๋™์ž‘์„ ์–ป๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ํ•จ์ˆ˜ ์ฃผ๋ณ€์— ์ž์ฒด ๋ž˜ํผ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ์˜ ์ถ”๊ฐ€ ์ฝ”๋“œ์™€ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์ถ”์ƒํ™” ๋ ˆ์ด์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•ฝ๊ฐ„ ์ƒ๊ฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด FreeBSD ๋ฒ„๊ทธ๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊นจ์ง„ ๊ตฌํ˜„์„ ์—ฌ์ „ํžˆ ํ•ด๊ฒฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๋ฌผ๊ณ ๊ธฐ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•˜๋Š” ํŒจํ„ด์„ ์„ค๋ฆฝ ํ•œ fish_wcswidth() ๋ณด๋‹ค๋Š” wcswidth() . ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ cppcheck ๊ทœ์น™ (_.cppcheck.rule_ ์ฐธ์กฐ)์œผ๋กœ ๋ช…์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. isw...() ํ•จ์ˆ˜ ๊ตฐ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ์ตœ์„ ์˜ ํ•ด๊ฒฐ์ฑ…์ž…๋‹ˆ๊นŒ? ํ™•์‹คํžˆ ๊ตฌํ˜„ํ•˜๊ธฐ ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ์—๊ฒŒ ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ถ”์‹ , ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ง€์›ํ•˜๋Š” ํ”Œ๋žซํผ ์ค‘ ํ•˜๋‚˜์—์„œ ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—์ด ๋ฌธ์ œ๋ฅผ "๋ฒ„๊ทธ"๊ฐ€ ์•„๋‹Œ "๊ฐœ์„ "์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ˆ? ์•„๋‹ˆ? ๋ฌด์Šจ ์ƒ๊ด€์ด์•ผ? :๋ฏธ์†Œ:

PPS, iswalnum() ์ œ๊ณต ํ•œ ํ”Œ๋žซํผ์„ ์žฌ์ •์˜ํ•˜๋ฉด FreeBSD 12์—์„œ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‚ด๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ตฌ์„ฑ์‹œ ๋™์ž‘์„ ํ™•์ธํ•˜๊ณ  ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ธฐ๋Šฅ์„ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

autoconf ํ…Œ์ŠคํŠธ์—์„œ ํ”Œ๋žซํผ ๊ธฐ๋Šฅ์„ ์žฌ์ •์˜ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, ์šฐ๋ฆฌ๋Š” ํ•œ ๋ฆด๋ฆฌ์Šค์—์„œ ์˜ฌ๋ฐ”๋ฅธ (๋˜๋Š” ์ž˜๋ชป๋œ) ๋™์ž‘์„ ๊ฐ€์ง„ ๋ฐฐํฌํŒ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณด์•˜๊ณ  ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” ๋™์ž‘์„ ๋’ค์ง‘ ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด FreeBSD 10 ์šฉ์œผ๋กœ ๋นŒ๋“œ ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” FreeBSD 12์—์„œ ์—ฌ์ „ํžˆ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. autoconf ํ…Œ์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๋Š” ํ–‰๋™์œผ๋กœ๋Š”์ด๋ฅผ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์—†์Šต๋‹ˆ๋‹ค. ๋‘˜์งธ, ๋ฌธ์ œ์˜ ํ…Œ์ŠคํŠธ๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋™์ž‘์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ž˜ํ•‘ํ•˜๊ณ  ์˜ํ–ฅ์„๋ฐ›๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํ˜ธ์ถœ์ด ์ค‘์š”ํ•œ ์„ฑ๋Šฅ ๋ฃจํ”„์— ์žˆ์ง€ ์•Š๋”๋ผ๋„ ๋งค์šฐ ์ €๋ ดํ•ฉ๋‹ˆ๋‹ค. ์…‹์งธ, ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ๋ฒ•์˜ ๋‚ด๋ถ€ ์‚ฌ์šฉ ์ „์šฉ ์ฝ”๋“œ ํฌ์ธํŠธ (๋‚ด TODO ๋ชฉ๋ก์— ์žˆ์Œ)๋ฅผ ๋‚ด๋ถ€ ์ƒํƒœ์— ์ฃผ์ž…ํ•˜์ง€ ๋ชปํ•˜๋„๋ก์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋„์ž… ํ•  ๋„์šฐ๋ฏธ ํ•จ์ˆ˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด์ „ ์˜๊ฒฌ์— ๋‹ค์Œ ์ง„์ˆ ์„ ์ผ์„ ๋•Œ ๊ธฐ๋ก์„ ์œ„ํ•ด ๋‘ ๋ฐฐํฌํŒ์„ ๋’ค์ง‘ ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— GNU๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” 0xF600์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๊ฐœ์ธ์šฉ ๋ฌธ์ž์— ๋Œ€ํ•ด iswgraph ()์— ๋Œ€ํ•ด 1์„ ์ž˜๋ชป ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ FreeBSD๋Š” 0์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์œ ๋‹ˆ ์ฝ”๋“œ FAQ์— ๋”ฐ๋ฅด๋ฉด ๊ฐœ์ธ ์‚ฌ์šฉ ์˜์—ญ์˜ ์ฝ”๋“œ ํฌ์ธํŠธ๋Š” ๊ด€๋ จ ๊ธ€๋ฆฌํ”„ (์ฆ‰, iswgraph() ๊ฐ€ ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ)๊ฐ€์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ถ„๋ฅ˜๋˜์ง€๋งŒ ์˜์ˆซ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค (์ฆ‰, iswalnum() ๋Š” ์ œ๋กœ).

์ด ๊ฐ’ ์ค‘ ํ•˜๋‚˜์—์„œ iswalnum ()์˜ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๋Š” autoconf ํ…Œ์ŠคํŠธ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํฌํŠธ์˜ FreeBSD ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒจํ‚ค์ง€๋Š” ํƒ€๊ฒŸ์ด ์•„๋‹Œ ๋‹ค๋ฅธ libc์— ๋Œ€ํ•ด ๋นŒ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ชจ๋“  ์„ค์ • ์‹œ๊ฐ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์˜ ๊ธฐ์ดˆ๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ปค๋ฐ‹๋˜๋ฉด Linux ๋ฐ OS X์—์„œ๋„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์‹œ์Šคํ…œ ์ œ๊ณต ๊ธฐ๋Šฅ์ธ @ krader1961์ด ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

Fish๋Š” FreeBSD์˜ ๊ณต์œ  libc์— ๋Œ€ํ•ด ๋นŒ๋“œ๋˜๊ณ  ๋™์ ์œผ๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

$ ldd fish
fish:
        libncurses.so.8 => /lib/libncurses.so.8 (0x800948000)
        libthr.so.3 => /lib/libthr.so.3 (0x800b9c000)
        libc++.so.1 => /usr/lib/libc++.so.1 (0x800dc3000)
        libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x801082000)
        libm.so.5 => /lib/libm.so.5 (0x8012a0000)
        libc.so.7 => /lib/libc.so.7 (0x8014cb000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x801885000)

๋กœ์ผ€์ผ ํ•˜์œ„ ์‹œ์Šคํ…œ์˜ ๋™์ž‘์ด ๋ณ€๊ฒฝ๋˜๋ฉด libc.so ๋ฒ„์ „ ๋ฒˆํ˜ธ๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋Š” 100 % ํ™•์‹ ์„ ๊ฐ€์ง€๊ณ  ๊ณ„์‹ญ๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ ์งˆ๋ฌธ์„ ํƒ๊ตฌ ํ•  ์‹œ๊ฐ„๋„ ์„ฑํ–ฅ๋„ ์—†๋‹ค. ๋‚˜๋Š” ๋‚ด ์ˆ˜์ •์ด ๋ฌผ๊ณ ๊ธฐ์˜ ํ–‰๋™์ด๋‚˜ ์„ฑ๋Šฅ์— ๋ˆˆ์— ๋„๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋ณด์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

๋กœ์ผ€์ผ ํ•˜์œ„ ์‹œ์Šคํ…œ์˜ ๋™์ž‘์ด ๋ณ€๊ฒฝ๋˜๋ฉด libc.so ๋ฒ„์ „ ๋ฒˆํ˜ธ๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋Š” 100 % ํ™•์‹ ์„ ๊ฐ€์ง€๊ณ  ๊ณ„์‹ญ๋‹ˆ๊นŒ?

"์šฐ๋ฆฌ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค".

"์šฐ๋ฆฌ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค"

๋ฌผ๋ก  ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ fish_wcswidth() ๋ฐ ์ž˜๋ชป๋œ ๊ตฌํ˜„์— ๋Œ€ํ•œ ์œ ์‚ฌํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด์žˆ๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

๋ฒ„๊ทธ๋Š” ctype ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” localedef ๋„๊ตฌ์— ์žˆ์œผ๋ฉฐ Illumos์—์„œ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ DF์— ๊ณ ์ • :

https://github.com/DragonFlyBSD/DragonFlyBSD/commit/07ed7d329a83714ec268e2f3ce026bba5a1ac5c2

@jrmarino : ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ด๊ฒƒ์ด ์–ธ์ œ ๋‹ค์–‘ํ•œ OS์— ์ ์šฉ ๋ ์ง€ ์•„์‹ญ๋‹ˆ๊นŒ? DF ๋ณ€๊ฒฝ์ด ์ด๋ฏธ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

FreeBSD์—์„œ๋„ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. https://svnweb.freebsd.org/base?view=revision&revision=306782

์นจ๋ก€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋ฐฉ๊ธˆ FreeBSD 11.0-RELEASE-p1๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ๋Š”๋ฐ ์ด๊ฑด ์ •๋ง ์งœ์ฆ๋‚ฉ๋‹ˆ๋‹ค. ํŒจ์น˜๊ฐ€ FreeBSD 11.0-RELEASE์— ํ†ตํ•ฉ๋˜๋Š”์ง€ ๋˜๋Š” ์–ธ์ œ ํ†ตํ•ฉ๋˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” git head์—์„œ ๋นŒ๋“œ ๋œ ๋ฌผ๊ณ ๊ธฐ์—์„œ์ด ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. BSD์˜ git head์—์„œ ๋ฌผ๊ณ ๊ธฐ์— ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ fish 2.3.1 ๋˜๋Š” ์ด์ „ ๋ฆด๋ฆฌ์Šค์—๋Š” ์—†์ง€๋งŒ ํ–ฅํ›„ 2.4.0 ๋ฆด๋ฆฌ์Šค์—์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ž์ฒด์ ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ด€๋ฆฌ์ž๊ฐ€ ์‰ฝ๊ฒŒ ๋ฐฑ ํฌํŠธ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ ์ฝ”๋“œ ๊ฒ€ํ†  ์ค‘์ž…๋‹ˆ๋‹ค.
https://reviews.freebsd.org/D8148

ํฐ.

@shanavar ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋‹ค์†Œ ๋ฐฉํ•ด๊ฐ€๋˜๋ฏ€๋กœ ๋ถ€์ž‘์šฉ์ด ์—†๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ํ™•์ธ๋˜๋ฉด 11.0-RELEASE์— ๋Œ€ํ•œ ์ •์˜คํ‘œ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์•ฝ ํ•œ ๋‹ฌ ์•ˆ์— ์˜ˆ์ƒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

git์—์„œ Fish๋ฅผ ์ปดํŒŒ์ผํ•˜๋ฉด FreeBSD 11.0-RELEASE-p1์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

sudo pkg remove fish
sudo pkg install autoconf  gmake
git clone [email protected]:fish-shell/fish-shell.git
cd fish-shell
autoconf
./configure
gmake
sudo gmake install

๊ทธ๋Ÿฐ ๋‹ค์Œ /usr/local/bin/fish ์„ /etc/shells ํ•˜๊ณ  chsh -s fish ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‰˜์„ Fish๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง„ ์‚ฌ๋žŒ์€ ๋‚˜๋งŒ์ด ์•„๋‹ˆ ์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ • ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚˜๋ฅผ ๋ฏธ์น˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰