sh -c 'env HOME=$(mktemp -d) fish'
) ?์ค์น๋ ๋ฌผ๊ณ ๊ธฐ ๋ฒ์ ( fish --version
) : 2.4.0
์ฌ์ฉ OS / ๋จ๋ง๊ธฐ : OSX 10.12.2 (16C67) / iTerm2 Build 3.0.13
์ธ์ ๋ง ์ถ๋ ฅํ๋ ๊ฐ๋จํ ์คํฌ๋ฆฝํธ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ์ ์์ต๋๋ค.
#!/usr/bin/env ruby
p ARGV
์คํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
> ./myscript.rb foo 'hello world'
["foo", "hello world"]
"hello world"๊ฐ ํ๋์ ์ธ์๋ก ๊ทธ๋ฃนํ๋๋ ๊ฒ๊ณผ "hello"๋ฐ "world"๊ฐ ๋ณ๋์ ์ธ์ ์ธ ๋ฐฉ๋ฒ์ ์ฃผ๋ชฉํ์ญ์์ค.
์ด์ ์ผ๋ถ ENV ๋ณ์๋ฅผ ์ค์ ํ์ฌ ์์์ ๋ฌผ๊ณ ๊ธฐ ๋ช ๋ น (๋ณ์นญ ํฌํจ)์ ์คํํ ์์๋ ๋ฌผ๊ณ ๊ธฐ ํจ์๋ฅผ ์์ฑํ๊ณ ์ถ์ต๋๋ค.
์ด๊ฒ์ ๊ทธ๋ฌํ ๊ธฐ๋ฅ์ ์ฒซ ๋ฒ์งธ ์๋์ ๋๋ค.
function debug
set -xg DEBUG 1
eval $argv
set -e DEBUG
end
์ด ํจ์๋ฅผ ํตํด ์์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ผ์ด ๋ฐ์ํฉ๋๋ค.
> debug ./myscript.rb foo 'hello world'
["foo", "hello", "world"]
๋จ์ผ "hello world"์ธ์๊ฐ "hello"๋ฐ "world"๋ก ๋ฐ๋ ์์์ ์ฃผ๋ชฉํ์ญ์์ค. ์ด๊ฒ์ ์ ๊ฐ ์ํ๋ ๊ฒ์ด ์๋๋๋ค.
๋ํ ๋ค์ ์ ๊ทผ ๋ฐฉ์์ ์๋ํ์ต๋๋ค.
env DEBUG=1 fish -c "$argv"
๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ต๋๋ค.
ํจ์์ $argv
"hello world"๊ทธ๋ฃน์ ์ ์งํ๋๋กํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ๋ด๊ฐ ๋ฌด์์ ๋์น๊ณ ์์ต๋๊น?
์ด๊ฒ์ ํนํ "$ argv"๊ฐ ์๋๋ผ eval
์ ๋ฌธ์ ์
๋๋ค.
eval
๋ ์ธ์๊ฐ ๋ช
๋ น ์ค์ ์ ๊ณต๋ ๊ฒ์ฒ๋ผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ฉฐ ์ธ์๊ฐ ๋ถํ ๋๋ ๋ฐฉ์์ ๋ํด์๋ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ด์ ์ ์ด๊ฒ์ ๋ํด ๋ฌธ์ ๊ฐ ์์์ง๋ง ์ง๊ธ์ ํ๊ฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ๋ค๋ฅธ ๊ฒ์ ๋ ๊น๋ค๋ก์ธ ์๋ ์๋ค๋ ํฉ์๊ฐ์์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ์๊ณ ์ํ๋ ๊ฒ์ # 154์ ์์ต๋๋ค- command
๋ง๋ค๊ณ ๋ณ์๋ฅผ ๋ฐ์๋ค์ด์ญ์์ค.
์ฆ, command $argv
์ถ๊ฐ ํ ์ ์์ผ๋ฉฐ ์์๋๋ก ์คํ๋ฉ๋๋ค.
ํ์ฌ string escape
, ์ฆ eval (string escape -- $argv)
์์ต๋๋ค.
๊ฐ์ฌ. (string escape -- $argv)
์ผํ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํ์ฌ
string escape
, ์ฆeval (string escape -- $argv)
์์ต๋๋ค.