cd .. && pwd
๋ ๋ค์ ์ค๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค.
fish: Expected a command name, got token of type 'Run job in background'. Did you mean 'COMMAND; and COMMAND'? See the help section for the 'and' builtin command by typing 'help and'.
cd .. && pwd
๋ถ๋ช
ํ COMMAND; and COMMAND
๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ง๋ง ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ด๊ฒ์ ์ง์ํ๋ค๋ฉด ์ข์ ๊ฒ์
๋๋ค.
๊ฐ์ฌ ํด์!
||
๋ ์ข์ ๊ฒ์
๋๋ค.
๋๋ ๋จ์ง ๋์์ ์ธ ์๊ฒฌ์ ํํํ๊ณ ์ถ์ ๋ฟ์
๋๋ค.
'||' ๋ฐ '&&'๋ ๊ตฌ๋ฌธ ์์์ด๊ณ 'and' ๋ฐ 'or'๋ ๊ฐ๋จํ ๋ช
๋ น์
๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ๋จํ๊ณ ๊น๋ํฉ๋๋ค.
์ด๋ฏธ ์กด์ฌํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด ์ถ๊ฐ ๊ตฌ๋ฌธ ์์๋ฅผ ๋์
ํ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
bash์ ๋ค๋ฅด์ง๋ง ๊ด์ฐฎ์ต๋๋ค.
๋๋ ๋ํ &&์ || ์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ตฌ๋ฌธ ์คํ์ด๊ธฐ ๋๋ฌธ์ ์ ์ฉ์ฑ์ด ์์ผ๋ฉด ์ ๋ง ์ข์ ๊ฒ์ ๋๋ค.
maxfl์ ์ ์์ +1.
maxfl์ ์ ์์ +1.
Ruby์๋ and
๋ฐ or
ํค์๋๋ ์์ต๋๋ค.
+1
๋๊ตฐ๊ฐ๊ฐ ์ด ์ผ์ ํ๊ณ ์ถ์ดํ๋ค๋ฉด ๋๋ ์ด์๊ฐ ์์ต๋๋ค.
-1 ๊ตฌํ์ &&/|| ๊ทธ๋ฆฌ๊ณ maxfl์ +1. ๊ทธ๋ฆฌ๊ณ ๋๋ ๊ทธ๊ฒ์ด ๊ตฌํ๋์ด์ผ ํ๋ ์ด์ ๋ฅผ ์ ๋ง๋ก ์ดํดํ์ง ๋ชปํฉ๋๋ค. ๊ทธ๊ฒ์ ๊ตฌ๋ฌธ์์ ์คํ์ด ์๋๋ฉฐ bash์์๋ ๊ตฌ๋ฌธ์ผ ๋ฟ์ด๋ฉฐ ๋ฌผ๊ณ ๊ธฐ์์๋ ์ด ๊ตฌ๋ฌธ์ด ์กด์ฌํ์ง ์์ต๋๋ค. ๋ํ ';or'๋ '||'๋งํผ ์ ํํ๊ฒ ํค ์ ๋ ฅ์ ์ทจํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ ์คํ์ผ๋ก ์ ๋ง ์ธ๋ชจ๊ฐ ์์ต๋๋ค.
and
๋ฐ or
๋ช
๋ น์ ๋จ์ํจ์ ์ข์ํ์ง๋ง ํ ๊ฐ์ง ๋ฌธ์ ๋ if ๋ฌธ์ ์ด์ํ๊ฒ ๋ง๋ ๋ค๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด:
if begin ; [ a = b ] ; and [ c = d ] ; end
...
์ ๋นํด
if [ a = b ] && [ c = d ]
...
๋๊ตฌ๋ ์ง ๊ทธ๊ฒ์ ๊ฐ์ ํ ์์ด๋์ด๊ฐ ์์ต๋๊น?
if test a = b -a c = d # or [ ] syntax, but I didn't particularly liked it
...
๊ทธ๋ฌ๋ test
๋ด์ฅ์์๋ ์๋ํ์ง๋ง ๋ค๋ฅธ ๊ณณ์์๋ ์๋ํ์ง ์์ต๋๋ค. c
๋ฐ d
๋ฅผ ์คํํ๋ ค๋ฉด ๋ด์ฅ a
๋ฐ b
๊ฐ true ๋ฅผ ๋ฐํํด์ผ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ๋ ๊ทธ๋ ๊ฒ ์ธ ์ ์์ต๋๋ค.
and b
and begin
c
d
end
๋๋ ๋ธ๋ก ๊ตฌ๋ฌธ ๋ฐ if
.
if begin
a
and b
end
c
d
end
๋๋ ์ค์ฒฉ๋ ์กฐ๊ฑด๋ถ๋ฅผ ๋ง๋์ญ์์ค.
if a
if b
c
d
end
end
๊ทธ๋ฐ ๋ค์ ๋ค์, ์ด ํดํน์ด ์ผ๋ง๋ ์์ฃผ ํ์ํ์ง ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง searchco.de์ ๋ฐ๋ฅด๋ฉด &&
๋ ๋๋ถ๋ถ test
๋ด์ฅ(๋๋ ๋ถ์์ฉ)๊ณผ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค.
๋๋ฌธ ๊ฒฝ์ฐ์ fish
์ ์ฉํ ๋ค๋ฅธ ๊ตฌ๋ฌธ์ด ํ์ํ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ด์จ๋ ๋ฐ์ด๋๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ( test
์ฒ๋ผ) ๋จ์ ์์ด์ผ ํ๋ค๋ ์ ์ ์ ์ธํ๊ณ ๋ ์ด๋ฏธ [
์ฒ๋ผ ๋๊ปด์ง๋๋ค. ํน๋ณํ ๋น๋ฆฐ๋ด๊ฐ ๋์ง๋ ์์ง๋ง ๋ฐ์ด๋๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ์์ต๋๋ค(์์ ์ด ์ง์ํ์ง ์๋ [[
์ ๋ฌ๋ฆฌ).
๋ ๊ฐ์ง ๊ตฌ๋ฌธ(๋๋ ์ด ๊ฒฝ์ฐ์๋ ์ธ ๊ฐ์ง)์ด ์์ผ๋ฉด ๋ค์ ํผ๋์ค๋ฌ์ธ ์ ์์ต๋๋ค. ์ด๋ค ๊ตฌ๋ฌธ์ ์ฌ์ฉํด์ผ ํฉ๋๊น?
if a
b
end
a; and b
a && b
&&
๊ฐ ๊ฐ์ฅ ์งง์ ๊ฒ ๊ฐ์ง๋ง ์ฌ์ค์ ์ ๋ฐ์
๋๋ค. ;and
๋ฅผ ์
๋ ฅํ๋ฉด ์ ํํ ๊ฐ์ ์์ ํค ์
๋ ฅ์ด ํ์ํฉ๋๋ค( &
์๋ Shift๊ฐ ํฌํจ๋๊ธฐ ๋๋ฌธ). &&
๋ฅผ ์ถ๊ฐํ๋ฉด ์ถ๊ฐ ๊ตฌ๋ฌธ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค(๋ค์ and
๋ begin
์ ๊ฐ์ ํค์๋๋ฅผ ๋ค์ ์ฝ์
ํ ์ ์๊ณ ์๋ํ๊ธฐ ๋๋ฌธ์ ์ผ์ข
์ ํน๋ณํ ๋ฐฉ์์ผ๋ก ๊ตฌ๋ฌธ ๋ถ์๋ฉ๋๋ค).
๋ฌธ์ ๋ ; and
๋ฐ ; or
๊ตฌ๋ฌธ์ด ์๋ค๋ ๊ฒ์
๋๋ค. ์ ๊ตฌ๋ฌธ์ ์ค๋ณต์ฒ๋ผ ๋๊ปด์ง ๊ฒ์
๋๋ค. ๊ทธ๊ฒ๋ค์ ์ด๋ฏธ ์ผ์ข
์ ๋ง๋ฒ์
๋๋ค( $status
๋ณ์๋ฅผ ๊ฒ์ฌํ๋ ์ ์คํฌ๋ฆฝํธ ํจ์๊ฐ ์๋๋๋ค). ๋ฐ๋ผ์ &&
๋ฐ ||
๋ก ๋์ฒด ๋๋ค๋ฉด ๋ฌธ์ ๊ฐ ์์ ๊ฒ์
๋๋ค. ||
.
์ด๋ป๊ฒ ์๊ฐํด์ผ ํ ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ํ ํ๋์ ๊ตฌ๋ฌธ ๋ง ์์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ; and
๋ฐ ; or
๋ฅผ ์ข์ํ์ง๋ง ์ด์ ๊ตฌ๋ฌธ์ด ์ ๊ฑฐ๋๋ค๋ฉด &&
๋ฐ ||
์ ๋ฌธ์ ๊ฐ ์์ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๊ณ ๋ คํ๋ฉด ; and
๋ฐ ; or
์ข์ต๋๋ค. ์๋ง๋ begin
๊ฐ ๋ ์งง๋ค๋ฉด(bash์ ์ค๊ดํธ์ฒ๋ผ)... ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋น๋ฆฐ๋ด๊ฐ ๋์ง ์์ ๊ฒ์
๋๋ค.
bash์ ๊ฐ์ [[ ๋ด์ฅ ๊ธฐ๋ฅ์ ์ง์ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋ ๋น ๋ฅด๋ฉฐ(๊ธฐ๋ณธ ์ ๊ณต ์์ฝ ์ฐธ์กฐ) && ๋ฐ || ๋ฐ/๋๋ ๋์์ ์๋ฎฌ๋ ์ดํธํ๊ธฐ ์ํด [[ ๋ฐ ]] ๋ด์ ์ฐ์ฐ์.
[[
๋ ์ค์ ๋ช
๋ น์ด ์๋๊ธฐ ๋๋ฌธ์ bash์๋ง ์กด์ฌํฉ๋๋ค. ๋ฌธ์ ๋ [[
๊ฐ ๋ถํ์ํ ์ธ์ฉ์ ํผํ๊ธฐ ์ํ ํน๋ณํ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ด ์๋ค๋ ์ ์ ์ ์ธํ๊ณ ๋ [
(๋๋ถ๋ถ)์ ๋น์ทํ๋ค๋ ๊ฒ์
๋๋ค. ์ง๊ต์ฑ ์ ๋ฒ์น๊ณผ ๋ฐ๊ฒฌ ๊ฐ๋ฅ์ฑ์ ๋ฒ์น ์ ์ฐธ์กฐํ์ฌ ๋ฌผ๊ณ ๊ธฐ์ ์๋ ์ด์ ๋ฅผ ํ์ธํ์ญ์์ค.
์ฌ์ค, [
๊ฐ ๋ฐ๊ฒฌ ๊ฐ๋ฅ์ฑ์ ๋ฒ์น๊ณผ ์ง๊ต์ฑ์ ๋ฒ์น ๋๋ฌธ์ ์กด์ฌํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ๊ฑฐ์ ํ์ ํ์ง๋ง /usr/bin
์ ๋ฐ์ด๋๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ์กด์ฌํฉ๋๋ค. test
๋ ํญ ์์ฑ์ ์ฌ์ฉํ์ฌ ๋ฐ๊ฒฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ ๋น์ ์์ ์
๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ฐจ๋จํ๋ ๊ฒ์ ๋ค์ ์์์ ์ด๋ฏ๋ก ๋ด์ฅ์ผ๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์๋ฅผ ๋ค์ด, bash์์ [[
๋ ๋ชจ๋ ๋ฌธ์์ด์ ์๋์ผ๋ก ์ธ์ฉํฉ๋๋ค.
[[ abc = $variable ]]
๊ทธ๋ฌ๋ ๊ณต๋ฐฑ ๋ถํ ๋์์ด ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฌผ๊ณ ๊ธฐ์์๋ ํ์ํ์ง ์์ต๋๋ค. ๋ํ &&
, ||
, <
, >
๋ ๊ตฌ๋ฌธ์ ๊ธฐ๋ฅ์ด๋ฏ๋ก ์๋์ผ๋ก ์ธ์ฉํฉ๋๋ค. ๋ฌผ๊ณ ๊ธฐ์์ &&
๋ -a
, ||
๋ -o
์
๋๋ค. <
๋ฐ >
๋ ์กด์ฌํ์ง ์์ต๋๋ค.
=~
์ฐ์ฐ์๋ ์์ต๋๋ค. fish
์์๋ ์ด๋ฅผ ์ํด ์กฐ์ฉํ grep์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
echo $ANSWER | grep -qE '^y(es)?$'
๋ํ bash
์๋ <
๋ฐ >
์ฐ์ฐ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ค์ ๋ค๋ฅธ ๋ฌธ์์ด๋ณด๋ค ํฌ๊ฑฐ๋ ์์ ๋ฌธ์์ด์ ํ์ธํฉ๋๋ค. ์ด๊ฒ์ ๊ฑฐ์ ์ ์ฉํ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ =
๋ฐ !=
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋ ์ ๊ท์์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๊ธ๋ก๋น ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค์ ๋งํ์ง๋ง, ์ด๋ฅผ ์ํด ์กฐ์ฉํ grep์ ์ฌ์ฉํ์ญ์์ค.
[[ abc = a* ]]
๋ํ [[
๋ -e
, -nt
, -ot
, -ef
, !
๋ก ์ ์๋์ง๋ง ๋ฌผ๊ณ ๊ธฐ๋ ์ด๋ฏธ test
์ด๊ฒ์ ๋ด์ฅํ๊ณ ์์ต๋๋ค.
[[
๋ฅผ ์ถ๊ฐํ๋ฉด ์ค์ ๋ก ๊ฒ์ํ ์ ์๊ณ ์ค์ ๋ก ๋ง์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ง ์๋ ๋ค๋ฅธ ํค์๋๊ฐ ์ถ๊ฐ๋ฉ๋๋ค. ์ ์ผํ ํฅ๋ฏธ๋ก์ด ๊ธฐ๋ฅ์ =~
์ด์ง๋ง, ์กฐ์ฉํ grep(๋๋ Perl)์ ์ ๊ตฌ๋ฌธ์ ์ถ๊ฐํ์ง ์๊ณ ๋ ๋์ผํ ์์
์ ์ํํ ์ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ, ์ฐ๋ฆฌ๋ ์์ ๋ชจ๋ ๊ฒ์ ์ถ๊ฐํด์๋ ์๋ฉ๋๋ค. ์ ๊ท ํํ์์ ๋ด์ฅํ ํ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ธ์, ๋๋ ์ฐ๋ฆฌ๊ฐ bash์ [[
๋ด์ฅ์ ๋ค์ ๊ตฌํํด์ผ ํ๋ค๋ ๊ฒ์ ๋ฐ๋์ ์๋ฏธํ์ง๋ ์์์ง๋ง, ์คํ๋ ค ์์ฒด ์์ฑ์ ๊ฐ์ง ๊ตฌ๋ฌธ ๊ตฌ์กฐ๋ก ๋์
๋์ด์ผ ํฉ๋๋ค. ๋ด ๋ง์, ๋ฌผ๊ณ ๊ธฐ๋ bash์ฒ๋ผ ๋ณด์ด๋ ๋ง์ ํค์๋์ ๊ตฌ์ฑ์ ๊ณต์ ํ์ง๋ง ์๋ก ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ด๋ป๊ฒ ๊ทธ๋ ๊ฒ ๋์ง ์์์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋น์ ์ด ๋งํ ๋ฐ์ ๋ฐ๋ฅด๋ฉด ์๋ง๋ ์ฐ๋ฆฌ ์์ ์ test
๊ตฌํํ๋ ๊ฒ์ด ๋ ๋์ ๊ตฌ์ฑ์ผ ์ ์์ง๋ง cond
์ ๊ฐ์ ๊ฒ์ผ๋ก ์ด๋ฆ์ด ๋ฐ๋์์ง๋ง ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋์ math
๋ด์ฅ์ ๊ตฌํํ๋ ๊ฒ์ฒ๋ผ expr
. ์ฐ๋ฆฌ๋ ์ฌ์ ์ ์ ๋ ฌ ๋์ ์์ฐ(์ซ์) ์ ๋ ฌ์ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด๋ฟ๋ง ์๋๋ผ ์ซ์์์๋ ์๋ํ๋๋ก < ๋ฐ >์ ๊ฐ์ ๊ฒ์ ๊ตฌํํ๋ ์ง์ ์ผ๋ก ๊ฐ ์๋ ์์ต๋๋ค.
@Undeterminant builtin [[ vs builtin [ vs /bin/[ ๋ฏธ๋ฌํ ์ฐจ์ด๋ bash์์ ์ด๋ฏธ ํผ๋์ค๋ฝ์ต๋๋ค. bash-[[ vs fish-[[ ๋ฏธ๋ฌํ ์ฐจ์ด!
๋ํ bash์ ์ ์ [[ ์ง๊ต์ฑ์ ๋ฒ์น์ ์๋ฐํฉ๋๋ค. "์์ " ๋ฐ/๋๋ ๊ตฌ์ฑ์ด ์ง์ํ๋ ํน์ ์กฐ๊ฑด์๋ง ํด๋นํฉ๋๋ค.
bash์ if commands...; then ...; fi
๊ฐ ๋ฌผ๊ณ ๊ธฐ ๋ฐ/๋๋ if...then
์ฌ์ด๋ฅผ ์ฝ๊ฒ ์ธ์ ํ๋ค๋ ๊ฒ์ ์์ด๋ฌ๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ "๊ทธ๋"๋ฅผ ์ํ์ง ์์ต๋๋ค. ์๋ง๋ ๊ณ ์ณ์ผ ํ ๊ฒ์ ์์...๋์ ๋ ์ฝ๊ฒ ๋ง๋๋ ๊ฒ์
๋๋ค.
์ฌ๊ธฐ ์ด์ํ ์์ด๋์ด๊ฐ ์์ต๋๋ค(๋๋ ๊ทธ๊ฒ์ ์ข์ํ๋์ง ์ ํ ํ์ ํ์ง ๋ชปํฉ๋๋ค):
if (foo; and bar)
...
end
ํ์ฌ ๋ช
๋ น ์์ ์ (...)
๋ ๋ถ๋ฒ์
๋๋ค. ์์ฐ์ค๋ฌ์ด ์ฝ๊ธฐ๋ ์ด๊ฒ์ ์คํํ๊ณ ์ถ๋ ฅ์ ๋ช
๋ น ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด์ง๋ง ์ด๋ฅผ ์ํด์๋ eval
ํ์ํฉ๋๋ค.
์ง์ ์ฝ๊ธฐ๋ฅผ ์ ๋ ํ์ฉํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ํ์ ํ๋ ๊ฒฝ์ฐ (...)
๋ฅผ begin ...; end
์์ต๋๋ค.
์ด ์์น์์ stdout์ ์บก์ฒํ์ง ์๋ ๊ฒ์ ์ผ๊ด์ฑ์ด ์์ง๋ง ๋งค์ฐ ์ปดํฉํธํ๊ณ ๊น๋ํ๊ฒ ๋ณด์
๋๋ค.
๋ด๊ฐ ๊ทธ๊ฒ์ ๋ํด ์ซ์ดํ๋ ๊ฒ์ if (...)
๊ฐ ๋ ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ตฌ๊ฑธํ๋ค๋ ๊ฒ์
๋๋ค. ์ถ๋ ฅ์ ์บก์ฒํ๊ณ ๋ถ์ธ ํด์์ ํ ๋นํ์ญ์์ค. ์: if (math 2 \< 4)
โ math
๋ ์ํ๋ฅผ ๋ฐํํ์ง ์๊ณ 0 ๋๋ 1์ stdout์ ์ธ์ํฉ๋๋ค. ํ ๊ฐ์ง ์ค์ํ ์ฉ๋๋ if $saved_bool
์
๋๋ค.
๋๋ ์ด๊ฒ์ด ์ค์ฉ์ ์ด์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํนํ 0/1์ด ์ ๋ง์ ์ผ๋ก ํผ๋๋๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ด์ ๋ถ์ธ ์๋ฏธ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํ ๋นํ๋ ๊ฒ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ if (...)
๋ฅผ ์ฒ์ ์ ํ์ ๋ ํฉ๋ฆฌ์ ์ธ ์ถ์ธก์ฒ๋ผ ๋ณด์
๋๋ค.
ํธํ์ฑ์ ์ํด bash ๋ฐ zsh์ ์๋ ๊ณตํต ์ฐ์ฐ์๋ฅผ ์ ๊ณตํ์ญ์์ค. ์ ๊ท ์ฌ์ฉ์๊ฐ ์ด์ ์ ๊ธฐ๋ฅ์ ๋๋ถ๋ถ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๋ ๊ฒ์ด ๋ ์ฌ์์ง์๋ก ๋ฌผ๊ณ ๊ธฐ์ ํก์์จ์ด ๋ ๋์์ง๋๋ค. ๋๋ ์ฌ๋ฌ ๋ฉด์์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋ ์ข์ํ์ง๋ง ์ด๋ฌํ ์ด๋ฆฌ์์ ์์ ์ฅ์ ๋ฌผ ์ค ์ผ๋ถ๋ ์ค์ ๋ก ์ง์ํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ๋์ง ์์์ผ ํ๋ 15๋ ์ด์์ ์ ์ฌ์ฉ์ ์ ์์ ํจ๊ป ์ฌ ๋ ์ด์ ๋ณด๋ค ๋ฒ๊ฑฐ๋ก์์ ๋ ๋ง์ด ๋ง๋ ๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค. .
์์งํ &&
๋ฅผ "์ด๋ฆฌ์์ ์์ ์ฅ์ ๋ฌผ"๋ก ๋ณด์ง ์์ต๋๋ค. zsh์ ๊ฐ์ "๋์ฒด ์" ๋์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์์ฒด ์ธ์ด๋ก ์ทจ๊ธํ๋ฉด ๋ฐฐ์ฐ๊ธฐ๊ฐ ์ด๋ ต์ง ์์ ๊ฒ์
๋๋ค. ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํ ํํ ๋ฆฌ์ผ์ ์ฒ์๋ถํฐ ๋๊น์ง ์ฝ์ผ๋ฉด ์ดํดํ๊ธฐ ์ด๋ ต์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
command1; and command2
์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๋ฉด and
๊ฐ command2
์ ์กฐ๊ฑด๋ถ ์คํ์ด๋ฉฐ command1
์ command2
์ฌ์ด์ ์ผ๋ถ ์กฐ์ธ์ด ์๋์ ๋ ๋ช
ํํ๊ฒ ์ ์ ์์ต๋๋ค
๊ทธ๋ฌ๋ @Undeterminant , ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ์ฒ์ ๋ฐ๊ฒฌํ์ ๋ ์ฒ์ ๋ณด๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค. ๊ทธ ๋๋์ด๋ ์๋ จ๋๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ค๊ฒ ํ์ญ์์ค. ์๋ฅผ ๋ค์ด, ์ค๋๋ ๋ ๊ฑฐ์ ๊ตฌ์ฑ์์ ์๋ฐฑ ์ค์ ๊ฐ์ ธ์๋๋ฐ ์์งํ ๋ณํํด์ผ ํ ๋ชจ๋ ๊ฒ์ ์ฆ์ ๋ณํํ ์๊ฐ์ด ์์ต๋๋ค. ๋ด ๋ฌธ์ ๊ฐ ๋ด ์ด์ ๊ตฌ์ฑ ๋ด์์ ์ด๋์ ์๋์ง์ ๊ด๋ จํ์ฌ ๋ฌผ๊ณ ๊ธฐ์์ ๋ฐํ๋๋ ์ค ๋ฒํธ๊ฐ ์๋ ์ด์ํ ์ ์ ์ฐพ๊ณ ์์ต๋๋ค.
๋น์ ์ ๊ด์ ์ ์ดํดํ์ง๋ง, ๊ทธ๊ฒ์ ํฐ ๊ณ ๋น๋ฅผ ๋๊ธฐ๋ณด๋ค๋ ๋ณํ๋ฅผ ๋ง๋ค๊ณ ์ถ์ดํ๊ณ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๊ทธ๊ฒ์ ํ๊ณ ์ ํ๋ ๋๊ตฐ๊ฐ์ ๊ดํด์๋ ํธํฅ๋์ด ์์ต๋๋ค. ์คํดํ์ง ๋ง์ธ์. ์ ๊ฐ ๋ฌผ๊ณ ๊ธฐ์ ๊ด์ฌ์ด ์์ด์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ค๊ณ ํ๋ค๋ฉด ์ง๊ธ ๋น์ฅ zsh๋ก ๋์๊ฐ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ ์๊ฐ๊ณผ ์ถ๋ก ์ด ์๋ก์ด ์ฌ๋๋ค์๊ฒ ์กฐ๊ธ ๋ ๋ฌธ์ ์ฌ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ค, ๊ฐ๋ ์ฑ์ ๋ํด์๋ ๋น์ ์ด ์ณ์ต๋๋ค. ํ์ง๋ง ์ค๋๋ ์ผ์ ํ๋๋ก ํ๊ณ ์ค๋ฅ๊ฐ ์๋ ๊ฒฝ๊ณ ๋ฅผ ์ฃผ์ด ์ฌ๋๋ค์ ์๋๋ก ํฉ์๋ค.
@ylluminate ๋น์ ์ ์์ ์ ์์ด๊ณ ์์ต๋๋ค. ๋ฌผ๊ณ ๊ธฐ๊ฐ &&
๋ฅผ ์ง์ํ๋๋ผ๋ ๋
ผ๋ฆฌ ์ฐ์ฐ์๋ณด๋ค ์คํฌ๋ฆฝํ
๊ตฌ๋ฌธ์ ๋ ๋ง์ ์ฐจ์ด์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ bash ๋๋ zsh์ ๊ตฌ์ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ํํ. ๋ฌผ๊ณ ๊ธฐ๋ ๊ธฐ๋ฅ์ ์ผ๋ก ๋ค๋ฆ ๋๋ค. ์ฆ, ์ฝ๋๋ฅผ ์ง์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ผ๋ฉด ์ ๋ฉ๋๋ค. ์ฝ๋๊ฐ bash๋ก ์์ฑ๋ ๊ฒฝ์ฐ ๋ฌผ๊ณ ๊ธฐ๋ก ๋ณํํด์ผ ํ๋ ๋ช ์์ ์ธ ํ์๊ฐ ์๋ ํ bash๋ก ์ ์งํ์ญ์์ค. ๊ทธ๋ค์ ๋ณ๋์ ์ธ์ด์ ๋๋ค.
๊ทธ๋์
๋ง์ฝ ๋ด๊ฐํ๋ค๋ฉด
๋ช
๋ น1 && ๋ช
๋ น2
๋ฌผ๊ณ ๊ธฐ์์ ๊ทธ๊ฒ์ ๋์ ๋ด๊ฐ ์
๋ ฅํ๋ ๊ฒ์ ์ ์ํฉ๋๋ค
๋ช
๋ น1; ๋ฐ ๋ช
๋ น2
๋๊ตฐ๊ฐ (๋ช ๋ น์ค์์) ๋ ๋ฒ์งธ ์ต์ ์ด ๋ ๊นจ๋ํ๊ณ ๋ฏธ๋์ ์ด๋ฉฐ ์ ๋ ฅํ๊ธฐ ๋ ์ฝ๋ค๊ณ ์ ๋ง๋ก ๋ฏฟ์ต๋๊น?
์๋ก์ด ๊ตฌ๋ฌธ์ ๋์ ํ๋ ๋์ ๋ช ๋ น์ ์คํํ๊ธฐ ์ํด ๊ธฐ์กด ๊ตฌ๋ฌธ์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ๋ ๊นจ๋ํฉ๋๋ค.
bash์์ ๊ณ ๋ คํ์ญ์์ค.
foo & bar # executes foo in the background, then bar in the foreground
foo && bar # executes foo in the foreground, then executes bar if foo has a zero exit status
foo & bar && baz & qux # left as an exercise for the reader
์ด๊ฒ์ ํน๋ณํ ๊ตฌ๋ฌธ ๋์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ํผํ๊ณ ์ ํ๋ ์ผ์ข ์ ๋์ผ์ค์ ๋๋ค.
์ด ๋์์ธ ๊ฒฐ์ ์ ํนํ if ๋ฌธ์์ ํ์คํ ๋น์ฉ์ ๋ฐ์์ํค๋ฉฐ, ์ด๋ฅผ ์ค์ด๋ ค๊ณ ๋ ธ๋ ฅํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ "๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋ค๋ฅธ ์กฐ๊ฐ์ฒ๋ผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ฐพ์"๋ณด๋ค๋ "๋ฌผ๊ณ ๊ธฐ์ ๋์์ธ ์ฒ ํ ๋ด์์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์"๋ผ๋ ์ ์ฅ์์ ์ ๊ทผํด์ผ ํฉ๋๋ค.
๊ทํ์ ์ฝ๋๋ ๋ค์์ ์ํํฉ๋๋ค(๋ธ๋ก๊ณผ ํจ๊ป &
๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ๊ฐ์ )?
foo &
if bar
baz
end &
qux
๋๋ฅผ ์ํด, ๊ทธ๊ฒ์ ์ธ์์ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ๋ํ &
๊ตฌ๋ฌธ์ด ๋๋ฌด ํผ๋์ค๋ฝ๋ค๋ฉด background
๋ด์ฅ ๋ฑ์ ๋ง๋ค์ง ์๊ฒ ์ต๋๊น?
๋๋ ๊ทธ๊ฒ์ด ๋ฐฐ๊ฒฝ์ ๋ด์ฅ์ผ๋ก ๋ง๋๋ ๊ฒ์ ๋ํ ์ฃผ์ฅ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋น๋ก ์ฐ๋ฆฌ๊ฐ ์ค์ ๋ก ๊ทธ๊ฒ์ ํ ๊ฒ์ ์ ์ํ์ง๋ ์์ง๋ง.
; and
๋ฐ ; or
๋ ํ์ดํ์ ์ ๋๋ก ์ํธ ์์ฉํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค. condition; and echo stuff | grep stuff
๋ ์๋ํ์ง ์์ง๋ง condition && echo stuff | grep stuff
๋ ์๋ํฉ๋๋ค. ํน๋ณํ ๊ตฌ๋ฌธ์ ์ถ๊ฐํ๋ ๊ฒ ์ธ์๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
and echo stuff | grep stuff
๋ ์ ์๊ฒ ํจ๊ณผ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ป๊ฒ ๊ณ ์ฅ๋ฌ๋์ง ์์ธํ ์๋ ค์ฃผ์ค ์ ์๋์?
@ridiculousfish ์์ ์ ๋จน๋ค ๋ฐ๊ฒฌํ ์ฌ๋ก์ ๋๋ค. or ์์ if ๋ฌธ ๋ฐ์์๋ true์ด์ง๋ง if ๋ฌธ์์ ์ฌ์ฉ๋ ๋๋ false๋ก ๋ณด์ ๋๋ค(?). ๋ด๊ฐ ์ฌ๊ธฐ์์ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ง ์๋ค๋ฉด?
root@smogon-dev ~# test 0 = 1; or echo stuff | grep stuff
stuff
root@smogon-dev ~# echo $status
0
root@smogon-dev ~# if test 0 = 1; or echo stuff | grep stuff
echo Success
else
echo Failure
end
Failure
bash์ ๋น๊ต:
~/smogon/bin$ [[ 0 == 1 ]] || echo stuff | grep stuff
stuff
~/smogon/bin$ echo $?
0
~/smogon/bin$ if [[ 0 == 1 ]] || echo stuff | grep stuff; then
> echo Success
> else
> echo Failure
> fi
stuff
Success
์ด ๊ฒฝ์ฐ:
if test 0 = 1; or echo stuff | grep stuff
๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ฉด ๋ ๋ช ํํ ์ ์์ต๋๋ค.
if test 0 = 1
or echo stuff | grep stuff
...
or
๋ฌธ์ if ๋ณธ๋ฌธ์ ์์ต๋๋ค! ๋ถ์ธ์ ๋ช
๋ น์ด๋ฏ๋ก ํน๋ณํ ์ฐ์ ์์๊ฐ ์์ต๋๋ค.
์์/๋์ "๊ดํธ"๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
if begin; test 0 = 1; or echo stuff | grep stuff ; end
...
๊ทธ๋์ ํ์ดํ์ ๊ด๋ จ์ด ์๋๋ผ ์ฐ์ ์์์ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด ๋ฒ๊ทธ์์ ๋ณผ ์ ์๋ฏ์ด ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ถ์ธ ์ฐ์ฐ์๋ฅผ ์ง์ํด์ผ ํ๋์ง์ ๋ํด ๋ง์ ์๊ฒฌ์ด ์์ต๋๋ค. :)
๊ทธ๋์ ์ฌ๊ธฐ์ ์์ ์๋์ง์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ด ์๋๋ ์ด๋ค ๊ฒ์ด ๋ ๋์์ง ์๋์ง์ ๋ํ ํ ๋ก ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋๋๋ค. ๊ทธ๊ฒ์ ๋จ์ง ์ค์ฉ์ ์ธ ์ผ์
๋๋ค.
์ฌ๋ฌ๋ถ ๋๋ถ๋ถ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์๊ฒ๋ ์คํํ ์คํฌ๋ฆฝํธ๊ฐ ์์ต๋๋ค. ๋งค์ฐ ๋จ์ํ ๊ฒฝ์ฐ์๋ && ์กฐ๊ฑด์ ๋ช
๋ น ์ฑ๊ณต(exit 0)์ ๋ณด์ฅํ์ง๋ง ";" ๋ฌด์จ ์ผ์ด ์์ด๋ ์๊ดํ์ง ์๊ณ ๊ทธ๋ฅ ๊ฐ์ธ์. ์ค๋ฅธ์ชฝ? ๋ฐ๋ผ์ ๊ทธ๋ค์ ์ ํ ๋์ผํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ์ด์ ๋์ํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. :)
๊ทธ๋์ ๋๋ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ๊ทธ๋ค ์ค ์ด๋ ๊ฒ๋ ๋ฌผ๊ณ ๊ธฐ์ ํจ๊ป ์๋ํ์ง ์์ต๋๋ค. ์, &&๋ฅผ ๋ง์ด ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก &&๋ ์ฌ์ฉํ๋ bash๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ๋ฅผ ํตํ ์ฝ๋์ ํํ์์๋ ๋ฐ์ํฉ๋๋ค. ๊ฐ๋จํ ๋งํด์ ๋ ์ด์ ๋ด ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค! :๋
๊ถ๊ธํด์์... ์ด ๋์์ ์์ ํ๊ธฐ ์ํด ๋ฌผ๊ณ ๊ธฐ ๊ตฌ์ฑ ํ์ผ์์ ํจ์๋ ์ ์๋ฅผ stablishํ๊ณ (&&๋ง ์๋ฏธ) ๊ธฐ์กด bash์์์ ๊ฐ์ด ๋๋๋ฆด ์ ์์ต๋๊น? ๊ฐ๋ฅํฉ๋๊น? ๊ทธ๋ด๋ฏํ? ํ ์ ์๋?
๋ค์ ๋งํ์ง๋ง, "and"์ ์ฌ์ฉ์ด ๋ ์ข๊ณ ๋ช ํํ ์ ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ด ์ฝ๋ ๋๋ ์ผ๋ฐ์ ์ผ๋ก ์์ ์ด๋ณด์ bash ์ฝ๋์์๋ ์๋ํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ &&๋ฅผ ๋์ฒดํ๋ ์ด๋ฏธ ์์ฑ๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๋์ (... ์ผ์ด๋์ง ์์ ๊ฒ์ ๋๋ค... ๊ทธ๋ฆฌ๊ณ ์๋ง๋ ์๋ํ์ง ์์ ๊ฒ์ ๋๋ค) ๋๊ตฐ๊ฐ ์ํ๊ฑฐ๋ ํ์๋ก ํ๋ ๊ฒฝ์ฐ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ ํต์ ์ธ bash
์๊ณ ํ์ ๋ชจ๋ ๋ถ๋ค๊ป ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!!
bash
/ zsh
์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ ํธํ์ฑ์ ๊ฐ๊น์์ง ์ ์ด ์์ต๋๊น? ๋ง์ ์ํฌ์คํ
์ด์
๊ณผ ์๋ฒ์ ์
ธ ํ๊ฒฝ์ ์ด๋ฏธ ๊ตฌ์ถํ ๋ชจ๋ ์ธํ๋ผ๋ฅผ ๋ณํํ๋ ๋ฐ ์๊ฐ์ ํ ์ ํ์ง ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด์ ์๊ฒฌ์ ๋ฐ๋ผ fish
๋ฅผ ํฌ๊ธฐํ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ ๊ฐ๊น์ฐ๋ฉด ๋ค์ ์๋ํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋๋ ๊ทธ๊ฒ ์์ด ๊ณ์ ํ์์ ํ ๊ฒ์
๋๋ค. ๊ฐ์ฌ ํด์.
@rhoconlinux &&
๋ฅผ ์ง์ํ๋๋ก Fish๋ฅผ ๋ณ๊ฒฝํ๋ฉด bash ์คํฌ๋ฆฝํธ๊ฐ ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๋ณด๋ค ๋ ๋ง์ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
๋ต๋ณ์ ์ดํดํ์ง ๋ชปํ์ต๋๋ค ^_^
&& ๋ฌธ์ ์ ๋ํ ๋ณ์นญ์ด๋ ํจ์๋ฅผ ์ ์ํ ์ ์์ต๋๊น?
@rhoconlinux ์๋์, Fish ํ์๋ฅผ ์์ ํด์ผ ํฉ๋๋ค(C++์์). ๋ด ์์ ์ Fish๊ฐ &&
๋ฅผ ์ง์ํ๋ค๋ฉด Bash ์คํฌ๋ฆฝํธ๋ Fish์ Bash์ ๋ค๋ฅธ ๋ชจ๋ ์ฐจ์ด์ ๋๋ฌธ์ ์ฌ์ ํ ์คํ๋์ง ์๋๋ค๋ ๊ฒ์
๋๋ค.
@kballard ์์ผ! ํ .... ์ด๋ฐ ๋ง์ ๋ค์ผ๋ ๋๋ฌด ์ฌํ๋ค์. ์ด์ ์๊ฒ ์ต๋๋ค. ๋งค์ฐ ๋ช ํํฉ๋๋ค. :)
์ด๊ณ ์ ํผ๋๋ฐฑ ๊ฐ์ฌํฉ๋๋ค. ๋๋ ๋ ๋์ ์ผ์์ ์ธ ๊ฒฝํ์ ์ํด ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๊ณ ๋ด ๋ฌผ๊ฑด์ ์ํ bash ํฐ๋ฏธ๋์ ์ ์งํ ๊ฒ์ ๋๋ค.
๊ฑด๋ฐฐ! :+1:
&&
๊ฐ ๋ฌธ์ ๋ผ๋ฉด ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
sed 's/&&/; and /' ~/.bashrc > ~/.config/fish/config.fish
๊ทธ๋ฌ๋ ์ด๊ฒ์ด ๋น์ ์ด ํด์ผ ํ ์ ์ผํ ์ผ์ด ์๋ ๊ฒ์ ๋๋ค. ๋น์ ์ด ์๋ฏธํ๋ ๊ฒ์ #522์ ๊ตฌํ์ ๋๋ค.
&& ํธํ์ฑ์ ๋ํ ์ฃผ์ ๋๊ธฐ๋ ๊ธฐ์กด
์ฝ๋๋ฒ ์ด์ค์ด์ง๋ง ์ธํฐ๋ท์์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ต๋๋ค.
์๋ฅผ ๋ค์ด sudo add-apt-repo... && sudo apt-get update && sudo
apt-get install ...
์ค๋ํซ์ ๋ณด๊ณ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๊ณ ์ถ์ง๋ง ์คํจํฉ๋๋ค.
์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๊ต์ก์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๊ฒ์ด ์๋๋๋ค.
์ค๋ํซ์ ๋ถ์ฌ๋ฃ๊ณ ํ์ค [ba]sh ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ &&
๋ ์ง๊ธ๊น์ง ๋ด๊ฐ ๋ถ๋ช์น๊ณ ์๋ #1 ๋ฌธ์ ์
๋๋ค.
( export FOO=bar
๋ #2 ์ด์ง๋ง function export; set -x -g
(echo $argv | sed 's/=/\n/'); end
๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค.)
๊ทธ๋๋ ์ฌ๊ฐํ ๋ฌธ์ ๋ ์๋๋๋ค. ์
๋ ฅํ๋ ์ต๊ด์ด ์๊ฒผ์ต๋๋ค.
bash
, ๋ถ์ฌ๋ฃ๊ธฐ, Ctrl+D.
ํ , ํ์ฌ/์ด์ ์ ์คํํ ํค๋ณด๋ ๋จ์ถํค๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ต๋๋ค.
bash์์ ๋ช
๋ น์ค.
๋ฌธ์ ์ ๋ํ ๋ด 2์ผํธ:
์ ๋ ์
ธ ๋ช
๋ น์ ํธ์ถํ๋ ๋ฐฐํฌ ๋๊ตฌ(https://github.com/andres-montanez/Magallanes)์์ ์์
์ค์ด๋ฉฐ ๋๋ถ๋ถ์ ์ฌ์ฉ์์ ๊ธฐ์ฌ์๋ bash ์
ธ์ ์ฌ์ฉํ ๊ฒ์
๋๋ค. ๋ฌผ๋ก ์ฌ๊ธฐ์ ๊ธฐ์ '&&'๋ ๋ช
๋ น์ ํจ๊ป ์ฐ๊ฒฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๋ช
๋ฐฑํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค(์: ๋ชจ๋ ๋ช
๋ น์ bash์ ๋ช
์์ ์ผ๋ก ์ ๋ฌ).
๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ฌ๋ฌ ๊ฐ์ง ๊ณ ํต์ ๊ฐ์ ธ๋ค์ค๋๋ค. ํ๋๋ ์ด์ํ ๋ถ์์ฉ์ด ์์ ์ ์์ต๋๋ค(์: PATH ๋ฐ ๊ธฐํ ๋ณ์๊ฐ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ ์๋์ง ์์). ์ด๋ ์ ์ผํ ๋ชฉ์ ์ ์ํด ๋๊ตฌ์ ์ผ๋ถ ํต์ฌ ๋ถ๋ถ์ ํดํนํ๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ ๋ฒ์ ๊ฐ์ ์์ ์ฌํญ์ ๋ณํฉํด์ผ ํฉ๋๋ค. ์
๋ฐ์ดํธํ ๋๋ง๋ค.
&&๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ํธํ๋์ง ์๋ ๋ง์ bash ๊ธฐ๋ฅ ์ค ํ๋์ผ ๋ฟ์ด์ง๋ง ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ด๊ณ ๋ง์ด ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์์ ๋๊ตฌ๋ PHP์ ์์ผ๋ฏ๋ก ๋ณต์กํ ๋ชจ๋ ์์ ์ PHP์์ ์ํ๋๋ฉฐ ๊ธฐ๋ณธ ์์คํ ๋ช ๋ น๋ง ์ ธ์ ์ ๋ฌ๋ฉ๋๋ค. ์ด๋ฌํ ์ต์ํ์ ์ฌ์ฉ ์ฌ๋ก๋ก ๊ตฌ๋ฌธ ๋นํธํ์ฑ์ ์น๋ ๊ฒ์ ์ค๋ง์ค๋ฝ์ต๋๋ค.
๋๋ @cben์ด &&
๊ฐ ํน๋ณํ ๊ฒฝ์ฐ๋ผ๊ณ ๋งํ ๊ฒ์ ์์ ํ ๋์ํฉ๋๋ค. ์๋ํ๋ฉด ๋ณต์ฌ์ ๋ถ์ฌ๋ฃ๊ธฐ์ ์ ์ผํ ์ฐจ์ด์ ์ &&
๋ํ ์ง์๋ฟ์ธ ์๋ฐฑ ๊ฐ์ ์ฝ๋ ์ค๋ํซ์ด ์จ๋ผ์ธ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๋๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๊ตฌ๋ฌธ ๋ฑ์ ์ธก๋ฉด์์ ์์ผ๋ก ์ด๋ป๊ฒ ๋ฐ์ ํ๋์ง ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํ๋ค๋ ๋ฐ ๋์ํ์ง๋ง ์ด๊ฒ์ด ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ์ฉํ๋ ค๋ ๋ง์ ๊ฐ๋ฐ์์ ์ถ์ ํจ์ฌ ์ฝ๊ฒ ๋ง๋ค ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. &&
๋ฅผ ; and
๋ฐ๊พธ๋ ๊ฒ์ด ๊ฐ๋จํ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ผ๋ง๋ ๋๋ผ์ด์ง ๋งํ ๋ ํญ์ ์ฑ๊ฐ์๊ณ ์ด์ํ๊ฒ ๋๊ปด์ง์ง๋ง ์ฃผ์๋ฅผ ๋๋ฌ๋ด์ผ ํฉ๋๋ค. ์ผ๋ถ ํค์๋๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ด๊ฐ ์ ๊ทธ๋ ๊ฒ ๊ฐ๋จํ ๊ฒ์ ๋ณ๊ฒฝํด์ผ ํ๋์ง ๊ถ๊ธํดํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋ณดํธํด์ผ ํ๊ณ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํ๋ณดํ๋ ์ข์ ์ฌ๋ก๊ฐ ๋์ง ์์ต๋๋ค.
๋๋ก๋ ๊ฐ์ฅ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์๋ ๊ฐ์ฅ ๋จ์ํ ๊ฒ์
๋๋ค.
์์ปจ๋ ์ ๋ bash &&
๊ตฌ๋ฌธ์ ํ์ฉํ๋ ๋ฐ ์ฐฌ์ฑํฉ๋๋ค.
@Globegitter ์ @cben์ ๋ง์ ๋์ํฉ๋๋ค. ๋ฐฉ๋ํ ์์ ์คํฌ๋ฆฝํธ์ ํ๋ก๊ทธ๋จ์ &&
๋ฐ ||
์์กดํฉ๋๋ค. ๋ด ์ํฌ์คํ
์ด์
์์ ํผ์ฌ ์์ ์ฌ์ฉํ๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ๋ ์ ๊ฐ ํธํ์ฑ์ด ์์ผ๋ฉด ์ข์ ๊ฒ์
๋๋ค.
&&
๋ฐ ||
์ธ์๋ Fish ์คํฌ๋ฆฝํ
๊ณผ Bash ์คํฌ๋ฆฝํ
์ฌ์ด์ ์๋นํ ์ฐจ์ด๊ฐ ์๋ค๋ ์ ์ ๊ฐ์ํ ๋ ์ฌ๊ธฐ ๋๊ธ์ ๋ค์ ์ฌ๋ฌ๋ถ ๋ชจ๋ Fish๊ฐ &&
์๋ฝํ๋๋ก ํ๋ ๊ฒ์ด ์ด๋ค ์ ์ผ๋ก๋ ์๋ฏธ๊ฐ ์์ต๋๊น? Bash ์ฝ๋ ์ค๋ํซ์ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ bash
๋ฅผ ์คํํ๊ณ ์ค๋ํซ์ ์คํํ ๋ค์ Fish๋ก ๋ค์ ์ข
๋ฃํ์ญ์์ค.
๋ง์ ์ฌ๋๋ค์ด ๋ฌผ๊ณ ๊ธฐ๋ก "์ ํ"ํ๊ณ ์ถ์ดํ์ง๋ง ๊ฐ์ ธ์ฌ ์ธํ๋ผ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ๋ ๋ณํํ๋ ๋ฐ ์๊ฐ์ ํ ์ ํ๊ณ ์ถ์ง ์์ 15๋ ๋์์ ์ ธ ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ํฌ์คํ ์ด์ ์๋ง ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋๋ ๋ช ๋ฌ์ ๊ฑธ์ณ "๋ฌผ๊ณ ๊ธฐ ๋ฐฉ์"์ผ๋ก ์๋ํ๋๋ก ํ๋ ๊ฒ์ ์ ๊ฒฝ ์ฐ์ง ์์ง๋ง ๋ค๋ฅธ ์๋ก ๋ณ๊ฒฝํ๊ธฐ ์ํ ์ํฌํ๋ก์ ์ด๊ธฐ ํฌ์๋ฅผ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค.
๋๋ ์ผ๋ฐ์ ์ธ ํธํ์ฑ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ค๋ฉด ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋นํ ์ฌ์ฉ์ ์ ์ ์ ๊ฐ์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ๋ฌผ๊ณ ๊ธฐ ๊ฐ๋ฐ์์ ์ผํ๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋งํ๋ ๊ฒ์ฒ๋ผ ์ด๊ฒ์ด ํ๋ก์ ํธ์ ์ฐ์ ์์๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ํ๊ฒฝ์ด ์ด์ ๊ด๋ จํ์ฌ ๋ฐ๋๋ฉด ๊ฒฐ๊ตญ ๋ฌผ๊ณ ๊ธฐ๋ก ๋์ด๊ฐ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ด ์ ์์ ๊ณ์ ์ฃผ์ํ๊ณ ์์ต๋๋ค.
ํ์์ ๋ฐ๋ผ bash
๋๋ zsh
๋ฅผ ์คํํ๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ์ ๊ฒฝ์ฐ์๋ ํด๋น ์
ธ์ ์คํํ๋ ๋ฐ ์๋นํ ์์ด ๋ ๊ฒ์ด๋ฉฐ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ด ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ๊ฐ๋ ๊ฒ์ ์ด๋ฆฌ์์ ์ผ์
๋๋ค.
@kballard ์ ๋ ๋ฌผ๊ณ ๊ธฐ๋ก ํ๋ ์คํฌ๋ฆฝํ
์ 95%์ ์ด์์ ์ธ ์ํฌํ๋ก๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. cmd+C ๋ค๋ฅธ ์์ค์ ๋งค์ฐ ๊ฐ๋จํ ์คํฌ๋ฆฝํธ, cmd+tab์์ iTerm, cmd+v ๋ฐ Enter๋ก. ์ถ๊ฐ bash
๋๋ ๊ทธ ๋ฐ์ ๊ฒ์ ์๋ฌด๊ฒ๋ ํ์ง ์๊ณ ๋ด๊ฐ ํ๊ณ ์ถ์ ์ ๋ถ์
๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด๋ฌํ ์คํฌ๋ฆฝํธ๊ฐ ์ด ์ ํํ ์ํฌํ๋ก์์ ์๋ํ์ง ์๋๋ก ํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ &&
๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ด ๋์ ๋ด๊ฐ ์ฌ๊ธฐ ์๋ ๋๋ถ๋ถ์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ ์ด์ ์
๋๋ค.
์ง์ ๊ฒฝํํ์ง ์์ ๊ฒฝ์ฐ ์ํฌํ๋ก๊ฐ ๋๋ฌด ์์ฃผ ์ค๋จ๋๋ฉด ๋ํด์ง๊ณ ๋ง์์ ์ ๋ฟ์ต๋๋ค.
๋๋ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ ๋ํด ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ฌ๋ํ๊ณ ๊ทธ๊ฒ์ด ๋ด๊ฐ ๋ค์ ์ ํํ ์ ์๋ ์ด์ ์ ๋๋ค.
์ฌ๊ธฐ ์์ต๋๋ค. PR #1633์ด ๋์ฐฉํ๋ฉด ๋ค์์ ๊ฐ์ ธ์ ~/.config/fish/functions/fish_user_key_bindings.fish
์ ์ฅํ ์ ์์ต๋๋ค.
function handle_input_bash_conditional --description 'Function used for binding to replace && and ||'
# This function is expected to be called with a single argument of either & or |
# The argument indicates which key was pressed to invoke this function
if begin; commandline --search-mode; or commandline --paging-mode; end
# search or paging mode; use normal behavior
commandline -i $argv[1]
return
end
# is our cursor positioned after a '&'/'|'?
switch (commandline -c)[-1]
case \*$argv[1]
# experimentally, `commandline -t` only prints string-type tokens,
# so it prints nothing for the background operator. We need -c as well
# so if the cursor is after & in `&wat` it doesn't print "wat".
if test -z (commandline -c -t)[-1]
# Ideally we'd just emit a backspace and then insert the text
# but injected readline functions run after any commandline modifications.
# So instead we have to build the new commandline
#
# NB: We could really use some string manipulation operators and some basic math support.
# The `math` function is actually a wrawpper around `bc` which is kind of terrible.
# Instead we're going to use `expr`, which is a bit lighter-weight.
# get the cursor position
set -l count (commandline -C)
# calculate count-1 and count+1 to give to `cut`
set -l prefix (expr $count - 1)
set -l suffix (expr $count + 1)
# cut doesn't like 1-0 so we need to special-case that
set -l cutlist 1-$prefix,$suffix-
if test "$prefix" = 0
set cutlist $suffix-
end
commandline (commandline | cut -c $cutlist)
commandline -C $prefix
if test $argv[1] = '&'
commandline -i '; and '
else
commandline -i '; or '
end
return
end
end
# no special behavior, insert the character
commandline -i $argv[1]
end
function fish_user_key_bindings
bind \& 'handle_input_bash_conditional \&'
bind \| 'handle_input_bash_conditional \|'
end
์ด๊ฒ์ &
๋ฐ |
๋ฐ์ธ๋ฉํ๊ณ &&
๋๋ ||
์๋์ผ๋ก ์ ์ ํ ; and
/ ; or
, ๋ฐ๋ผ์ command one && command two
ํ์์ ํ์ ๋ถ์ฌ๋ฃ๊ณ ์๋ํ๋๋ก ํฉ๋๋ค.
PR #1633์ด ์น์ธ๋ ๋๊น์ง ์ด ์คํฌ๋ฆฝํธ๋ _typing_ &&
/ ||
๋ํด ์๋ํ์ง๋ง ๋ถ์ฌ๋ฃ๊ธฐ์๋ ์๋ํ์ง ์์ต๋๋ค.
@kballard ์์ฐ, ํฌ์์์ ๋๋ค! ์ ๋ง ๊ณ ๋ง์ต๋๋ค.
์ด๊ฒ์ ์ค์ ๋ก ๊ฒ์ ๋ชจ๋๋ฅผ ์ ๋๋ก ์ฒ๋ฆฌํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค(ํ์ด์ ๋ชจ๋์ ๋ํด์๋ ํ์คํ์ง ์์ต๋๋ค. ์ ํํ ๋ฌด์์ ๊ตฌ์ฑํ๋์ง ํ์คํ์ง ์์ต๋๋ค). ๊ฒ์ ์ค์ &
๋๋ |
๋๋ฅด๋ฉด ๊ฒ์์ด ์ข
๋ฃ๋ฉ๋๋ค. ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ฌ๋ฌ ์ค ๋ช
๋ น์ |
๋๋ &
๋ฅผ ์
๋ ฅํ๋ ๋ฒ๊ทธ ์์ ์ผ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์
๋ฐ์ดํธํ์ต๋๋ค.
@kballard ํ๋ณด๊ฐ &&
์ด ์ต์ ๋ง์คํฐ์์ ์๋ํ๋๋ก ํด์ผ ํฉ๋๊น?
๋ค, ๊ทธ๋์ผ ํฉ๋๋ค. ์ฌ์ฉํด ๋ณด๊ณ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด ์๋ ค์ฃผ์ธ์.
- ์ผ๋น
2014๋ 9์ 1์ผ ์ค์ 1์ 14๋ถ์ Markus Padourek [email protected] ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@kballard ํ๋ณด๊ฐ
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ํ์ ํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
๋ฉฐ์น ์ ์ ์ถ์๋ ์๋ก์ด 2.1.1 ๋ฒ์ ์ผ๋ก ์ด ์คํฌ๋ฆฝํธ๋ฅผ ์๋ํ์ง๋ง ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. 2.2๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋์? ๊ฐ์ฌ ํด์!
@pragmattica : 2.1.1์ ๋ณด์ ๋ฒ๊ทธ ์์ ๋ฆด๋ฆฌ์ค์์ต๋๋ค. ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ง ์์์ต๋๋ค.
@xfix : ์๊ฒ ์ต๋๋ค. ์๋ ค ์ค์ ๊ณ ๋ง์. 2.2๊น์ง ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค!
๊ต์ฅํ๋ค :+1:
์ฌ์ฉ ๊ฐ๋ฅํ ์คํ ์ค์ธ ๋ณ๊ฒฝ ๋ก๊ทธ๊ฐ ์์ต๋๊น? CHANGELOG
๋ฃจํธ๊ฐ ์๋นํ ์ค๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
@pragmattica ์ด์ ๋ฌผ๊ณ ๊ธฐ 2.2๊ฐ ๋์์ผ๋ ์ฐ๋ถํฌ 14.04์์ ์๋ํ๋๋ฐ echo 'test1' && echo 'test2';
๊ฐ echo test1 &; and echo 'test2';
๋ก ๋ฐ๋๋๋ค.
fish_user_key_bindings.fish
๋ด์ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๊น? (๋ด๊ฐ ์ง์ ์ดํด๋ณด๋ ค๊ณ ํ์ง๋ง ๋ด ๋ฌผ๊ณ ๊ธฐ/๋ฐฐ์ ์คํฌ๋ฆฝํธ ์ง์์ด ์ฝ๊ฐ ๋ถ์์ ํฉ๋๋ค)
ํธ์ง: ๊ทธ๋ฌ๋ &&
๋ช
๋ น์ ์
๋ ฅํ๋ฉด ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋์ค์ ๊ณต๊ฐ์์ ์ผ์ด๋๋ค๋ฉด ์กฐ๊ธ ์ข๊ฒ ์ง๋ง ๊ทธ๊ฑด ๋ณ๋ก ์ค์ํ์ง ์์ต๋๋ค. ์ ๋ฐ์ด ์๋ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. :)
-1 ์ด์ํ ๊ธฐํธ:
if [[ a = b ]]; and [[ b = a ]]; or [[ c = b ]]; then echo hello; and echo world; done
๋จ์ ๊ธฐํธ์ +1:
if [[ a = b ]] && [[ b = a ]] || [[ c = b ]]; then echo hello && echo world; done
Aaahhh @pragmattica commandline
๋ช
๋ น์ ๋ฐ์ดํ ์์ด ๋ฒํผ๋ฅผ ๋ฐํํฉ๋๋ค. ๋ค ๊ทธ๋ฐ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฐ๋ผ์ https://github.com/fish-shell/fish-shell/issues/2210 ์ด ์์ ๋๋ฉด ์์ ์คํฌ๋ฆฝํธ๋ ์์ ๋์ด์ผ ํฉ๋๋ค.
์์ง ์์์ด ๊ณ ๋ ค ์ค์ ๋๊น?
+1
๊ธฐํธ๋ ์ด์ํ์ง ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋
ผ๋ฆฌ์ ์ฌ์ฉ๋ฉ๋๋ค.
๋ณต์ฌ ๋ฐ ๋ถ์ฌ๋ฃ๊ธฐ ํธํ์ฑ์ ๋งค์ฐ ์ค์ ์ ์ธ ์ฃผ์ฅ์ด๋ฉฐ ์ ๊ฐ ์ง์งํ๋ ๊ฒ์
๋๋ค.
๋๋ ๋์ ์ฌ๋์ด ๋์ด ์ด ํ ๋ก ์ ๋ง์น๊ฒ ์ต๋๋ค. ์ด๊ฒ์ ๊ตฌํ๋์ง ์์ต๋๋ค. ํนํ "bash ์คํฌ๋ฆฝํธ์์ ๋ช
๋ น ์๋ผ๋ด๊ธฐ ๋ฐ ๋ถ์ฌ๋ฃ๊ธฐ"๋ฅผ ์ํํ ์ ์๊ธฐ๋ฅผ ์ํ๋ค๋ ๋ฐ๋ณต์ ์ธ ์ง์ ์ ์ ๊ฒฝ์ด ์ฐ์
๋๋ค. ๋ฌผ๊ณ ๊ธฐ๊ฐ &&
๋ฐ ||
์ฐ์ฐ์๋ฅผ ์ง์ํ๋๋ผ๋ ํด๋น ์ฐ์ฐ์๊ฐ ํฌํจ๋ ๋ช
๋ น๋ฌธ์ ๋จ์ํ ์๋ผ๋ด์ด ๋ถ์ฌ๋ฃ์ ์ ์๋ค๋ ๋ณด์ฅ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋น์ ์ด ๊ทธ๋ ๊ฒ ํ ์ ์๋ค๋ ์ธ์์ ์ฃผ๊ณ ์ถ์ง ์์ต๋๋ค. ์์งํ ๋งํด์ bash/zsh ๊ตฌ๋ฌธ๊ณผ ๋์์ ์ํ๋ฉด ํด๋น ์
ธ(๋๋ ํธํ์ฑ์ ์ฃผ์ฅํ๋ ๋์)์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋
ผ์๋ ๋๋ถ๋ถ์ ๋ค๋ฅธ ์์ด๋์ด์๋ ๊ณ ์ ํ ๋ฌธ์ ๊ฐ ์์ด์ผ ํฉ๋๋ค. ํนํ ksh88(bash ์๋)์ ์ํด ์ฒ์ ๋์
๋ ์ผ๋ถ [[ ... ]]
๋์์ ๊ตฌํํ๋ ๋ฐ ์ฝ๊ฐ์ ์ฅ์ ์ด ์์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ง๋ ์ด๋ฌํ ํน์ ํ ํฐ์ ๊ตฌํํ๋ ๊ฒ๋ณด๋ค ๋ด์ฅ test
๋ช
๋ น ๋๋ ์ ๋ช
๋ น์ ํฅ์์ํค๋ ๊ฒ์
๋๋ค.
๋๋ ์ฌ์ ํ zsh์ bash๋ฅผ ์ง์ํ์ง ์๋๋ค๋ ์ด ๊ฐ๋ ์ ๋ํด ๋งค์ฐ ํผ๋์ค๋ฌ์ํฉ๋๋ค. ๋ ผ๋ฆฌ๋ ์ดํดํ ์ ์์ง๋ง ๋์ํ์ง ์์ต๋๋ค. ์์ ์๋ ๋ฌผ๊ณ ๊ธฐ์ ๊ด์ฌ์ด ๋ง์๋๋ฐ ๋ฐ๋์ ๋ฐ๋ ค ๋ค๋ก ๋ฌผ๋ฌ๋ฌ์ต๋๋ค. ๊ฐ๋ฐ์๋ก์ ์ด๊ฒ์ด ๊ตฌํ๋๊ธฐ๋ฅผ ์ํ๋ ์ฐ๋ฆฌ๊ฐ ์ถฉ๋ถํ๋ค๋ฉด ์ฌ๊ธฐ์์ ํ๋ก์ ํธ๋ฅผ ๋ถ๊ธฐํ ๊ธฐํ๊ฐ ์์ ์ ์์ต๋๋ค. ์ด๋ฌํ ํฅ๋ฏธ๋ก์ด ์ํ์ ์ ์ง ์ถ์ง๋ ฅ๊ณผ ์์ฉ์ ๊ถ๊ทน์ ์ผ๋ก ๋ฐฉํดํ๋ ์ด๋ฌํ ์ง์์ ์ธ ์ ํญ์ ๋ณด๋ ๊ฒ์ ์ฌํ ์ผ์ ๋๋ค.
@ylluminate "zsh ๋ฐ bash ์ง์"์ผ๋ก ๋ฌด์์ ์ผ๋์ ๋๊ณ ๊ณ์ญ๋๊น? ์ด๋ค ์์ค์ ํธํ์ฑ์ ๋ณด๊ณ ์ถ์ต๋๊น?
๋๋ ์ฌ์ ํ zsh์ bash๋ฅผ ์ง์ํ์ง ์๋๋ค๋ ์ด ๊ฐ๋ ์ ๋ํด ๋งค์ฐ ํผ๋์ค๋ฌ์ํฉ๋๋ค. ๋ ผ๋ฆฌ๊ฐ ์ดํด๊ฐ ๊ฐ๋ค์...
๋ฌผ๊ณ ๊ธฐ ์ง์ bash ๋ฐ zsh ๊ธฐ๋ฅ์ ๋ํ ๋ ผ๋ฆฌ๋ฅผ ์ดํดํ์ง ๋ชปํ๋ ๊ฒ ๊ฐ์ต๋๋ค. Java๋ฅผ ์ํ๋ฉด C++๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? Perl์ ์ํ๋ค๋ฉด ์ Python์ ์ฌ์ฉํฉ๋๊น? @ridiculousfish๊ฐ ๋ฐฉ๊ธ ์ง๋ฌธํ ๊ฒ์ฒ๋ผ ๊ตฌ๋ฌธ์์ ์คํ ์ธ์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋น์ ์ ํ๋ณตํ๊ฒ ํ๊ธฐ ์ํด ์ง์ํด์ผ ํ ๋ค๋ฅธ ๊ฒ์ ๋ฌด์์ ๋๊น? ์ด๋ค ์์ ์์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ ๋ค๋ฅธ bash ํด๋ก ์ด๋ฉ๋๊น?
์ถ์ , ์ ๋ 1979๋ ๋ถํฐ ์๊ณ๋ฅผ ์ํด ํ๋ก๊ทธ๋๋ฐ์ ํ์ผ๋ฉฐ 80๋ ๋ ์ค๋ฐ๋ถํฐ UNIX๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋๋ฌด ๋ง์ ์์ ์ฌ์ฉํ์ฌ ์ ์๋ฅผ ์์์ต๋๋ค(์: Bourne, Csh, Ksh88, Ksh93, Bash, Zsh, Xonsh). ์์ ์ ํํ๋ ค๋ฉด ํญ์ ์์ ์ด ํ์ํฉ๋๋ค(5๋ ์ ํ ๋ฒ ์ด์ ํ์ง ์๋ ์ด์ ์ ๋๋ค). ๊ทธ๋ ๊ฒ ํ ๋ ์ ์ ธ์ด ๋ชจ๋ ๋ ๊ฑฐ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณ๊ฒฝ ์์ด ์คํํ์ง ์๋๋ค๊ณ ๋ถํํ์ง ์์ต๋๋ค.
@krader1961 ์ข์ ๋ด ๊ฒธ์ํ ์๊ฐ์ผ๋ก ...
๋๋ ํญ์ ๋ฌผ๊ณ ๊ธฐ์์ ์คํฌ๋ฆฝํ ์ํ์ง ์์ ๊ฒ์ ๋๋ค (์ฃผ๋ฌธ์ ๋ฐ๋ฆ).
; and
, ; or
์ด ๋ณด๊ธฐ์๋ ๋ณด๊ธฐ ํํฉ๋๋ค)๊ธ์, ๋๋ ๋ฌผ๊ณ ๊ธฐ ์คํฌ๋ฆฝํธ๊ฐ ๋ค๋ฅธ ์ (์: mksh, bash)
๋ฐ๋ฉด์ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
set -Ux
).@ylluminate 4๋ ์ฐจ ์ด์๋ฅผ ๋ณด๋ ๋ฐฐ์ฌ ๊ฐ์ ์์ ์ ์ฆ๊ธฐ๊ณ ์ถ์ ์ฌ๋๋ค์ด ์ฌ์ ํ ๊ฒ์ผ๋ฅด๋ค/๋ฐ์๋ค. ์ด๋งํ๋ ์ฌ๋๋ค์ ์์ ์ ๊ป๋ฐ๊ธฐ๋ฅผ ๋ง๋ค๊ณ ์์ต๋๋ค(์: magicant/yash, elvish/elvish, michaelmacinnis/oh, ๊ทธ๋ฆฌ๊ณ me :-P). ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ๋ฐฉ์์ผ๋ก ์ผ์ ํ๋ ค๋ฉด ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ๊ป์ง์ด ํ์ํ ๊ฒ์ ๋๋ค.
&& ||
๋ฅผ ๋ฌผ๊ณ ๊ธฐ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํ๊ณ ๋งค์ฐ ์ฌ๋ฏธ์๊ฒ ๋ง๋ค์ง ์์ผ๋ฉด begin; end
์ถ๋ฐฉํ๊ณ ์์์ ์ ์ ์์ต๋๋ค.์นด์ดํฐ- ;
and or
๋ ์ด์ค ์ญํ ์ ํ๊ณ ,๋งค์ฐ ์ฝ๊ฐ ๋ชป์๊ธด) ์ฝ๊ฐ์ ์คํ๋ง ์ป์ผ์ญ์์ค.
@pickfire "๋ฌผ๊ณ ๊ธฐ์ ์คํฌ๋ฆฝํธ๊ฐ ๋๋ฆฝ๋๋ค"์ ๋ํด ์์ธํ
๋ด ํ
์คํธ ๋ฌผ๊ณ ๊ธฐ FWIW๋ ๋๋ถ์, ๋น ๋ฅธ ์ ์ฒด ๋ฐฐ์ฌ๋ณด๋ค posix_spawn
๊ฐ ๊ฐ์ ํน์ ๊ฒฝ์ฐ์ ๋๋ฆฐ์์ ์ ์์ง๋ง, ๊ทธ ๋น ๋ฅธ ํ์ alias
.
ivan<strong i="5">@alarmpi</strong> /tmp> echo 'echo test' > script
ivan<strong i="6">@alarmpi</strong> /tmp> time bash script
test
0.02user 0.01system 0:00.03elapsed 96%CPU (0avgtext+0avgdata 2776maxresident)k
0inputs+0outputs (0major+149minor)pagefaults 0swaps
ivan<strong i="7">@alarmpi</strong> /tmp> time mksh script
test
0.00user 0.00system 0:00.02elapsed 0%CPU (0avgtext+0avgdata 1420maxresident)k
480inputs+0outputs (2major+82minor)pagefaults 0swaps
ivan<strong i="8">@alarmpi</strong> /tmp> time fish script
test
0.07user 0.01system 0:00.09elapsed 85%CPU (0avgtext+0avgdata 4204maxresident)k
352inputs+0outputs (2major+231minor)pagefaults 0swaps
@ridiculousfish ๋จ ํ๋์ echo
์ ๋ํด ๋ค๋ฅธ ๊ฒ๋ค์ ๋นํด ์ด๋ฏธ ๋งค์ฐ ๋๋ฆฌ๋ค๊ณ ์์ํด๋ณด์ญ์์ค.
@krader1961 @ridiculousfish IMO, https://github.com/fish-shell/fish-shell/issues/2210 ์ด ์ถ์๋๋ฉด ํ์๋ ์ ์์ต๋๋ค. @kballard๊ฐ ๊ฒ์ํ ๋งค์ฐ ์ฌ์ด ์๋ฃจ์ ์ด ์์ต๋๋ค.
@pickfire ๊ณต์ echo
์๊ฐ์ด ์๋๋ผ ์์ ์ค๋ฒํค๋๋ฅผ ์ธก์ ํ๊ณ ์์ต๋๋ค. ์์ ์๊ฐ์ ๋งค์ฐ ์ค์ํ์ง๋ง ํด๋น ํ
์คํธ์์ ์์ ์๊ฐ(๋๋ถ๋ถ config.fish์ ๋ฐ๋ผ ๋ค๋ฆ)์ ๋์ด์๋ ๊ฒฐ๋ก ์ ๋์ถํ ์ ์์ต๋๋ค.
๋ค์์ ๋ค๋ฅธ ๋ง์ดํฌ๋ก ๋ฒค์น๋งํฌ์ ๋๋ค.
> cat test.fish
for i in (seq 1000)
ls > /dev/null
end
> time fish test.fish
1.51 real 0.74 user 0.65 sys
> cat test.sh
for i in {1..1000} ; do
ls > /dev/null
done
> time bash test.sh
2.01 real 0.85 user 1.12 sys
์ฌ๊ธฐ์์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ง์ด ์ด๊ฒผ์ง๋ง ์ด๊ฒ์ ์ฃผ๋ก ํฌํฌ์ posix_spawn์ ์ฐจ์ด๋ฅผ ์ธก์ ํ๋ ๊ฒ์ ๋๋ค.
์ฌ๊ธฐ์ ํ ๊ฐ์ง ๊ฒฐ๋ก ์ ํฌ๊ด์ ์ธ ๋ฒค์น๋งํฌ ์ ํ๊ตฐ์ด ํ์ํ๋ค๋ ๊ฒ์ ๋๋ค.
@ridiculousfish ๋น์ ์ด ์ ์๊ฒ ์ค ๋ฒค์น๋งํฌ๊ฐ ์ฌ๊ธฐ ์์ต๋๋ค:
> cat test.fish
for i in (seq 1000)
ls > /dev/null
end
> time fish test.fish
4.18user 4.04system 0:22.62elapsed 36%CPU (0avgtext+0avgdata 4360maxresident)k
96inputs+0outputs (1major+321041minor)pagefaults 0swaps
> cat test.sh
for i in {1..1000} ; do
ls > /dev/null
done
> time bash test.sh
0.70user 1.62system 0:09.81elapsed 23%CPU (0avgtext+0avgdata 2844maxresident)k
0inputs+0outputs (0major+154100minor)pagefaults 0swaps
> time mksh test.sh
0.00user 0.01system 0:00.04elapsed 24%CPU (0avgtext+0avgdata 1780maxresident)k
752inputs+0outputs (3major+203minor)pagefaults 0swaps
mksh
๋ ๋๋ผ์ด ์๋๋ฅผ ๊ฐ์ง ๊ฒ ๊ฐ์ต๋๋ค.
@pickfire fish์ ls
๋ bash๊ฐ ํ์ง ์๋ ์ถ๋ ฅ์ ๋ ์ข๊ฒ ๋ง๋ค๊ธฐ ์ํด ๋ค๋ฅธ ์์
์ ์ํํ๋ Linux์ ๊ธฐ๋ฅ์
๋๋ค. Linux์์ ์ฌ๊ณผ ๋ ์ฌ๊ณผ ๋น๊ต๋ฅผ ์ํ๋ฉด command ls
. (๋ค์์์๋ ๋ฌผ๊ณ ๊ธฐ์ ls
๋ํผ๊ฐ ํจ์ฌ ์์ต๋๋ค. ์ง์ ํ์ด์ผ ํ๋๋ฐ ๊น๋นกํ์ต๋๋ค.)
ํ
์คํธ์์ mksh์ "์ธ์์ ์ธ ์๋"์ ๋ํ ์ค๋ช
์ mksh์ ์ค๊ดํธ ํ์ฅ์ด ์์ผ๋ฏ๋ก ls
ํ ๋ฒ๋ง ํธ์ถํ๋ค๋ ๊ฒ์
๋๋ค. ๋ถ๋ช
ํ ls
ํ ๋ฒ ํธ์ถํ๋ ๊ฒ์ด 1000๋ฒ ํธ์ถํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฆ
๋๋ค.
์ด๊ฒ์ ์ฑ๋ฅ ์ธก์ ์ด ๋งค์ฐ ๊น๋ค๋กญ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ธก์ ํ๊ณ ์๋ค๊ณ ์๊ฐํ๋ ๊ฒ๊ณผ ๋ค๋ฅธ ๊ฒ์ ์ธก์ ํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ต๋๋ค!
@ridiculousfish , ls
ํจ์๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๊ฐ command ls
๋น๊ตํ์ฌ ๋ฌผ๊ณ ๊ธฐ ์คํฌ๋ฆฝํธ์
๋๊น? ์คํฌ๋ฆฝํ
์ค์๋ ์ถ๋ ฅ์ด ์ค์ํ์ง ์์ต๋๋ค.
์ข์, ์ด๋ฒ์๋ ๋น์ ์ด ๋งํ ๋๋ก ํ์ต๋๋ค.
> cat test.fish
for i in (seq 1000)
command ls > /dev/null
end
> time fish test.fish
0.66user 1.04system 0:08.08elapsed 21%CPU (0avgtext+0avgdata 4364maxresident)k
624inputs+0outputs (4major+113176minor)pagefaults 0swaps
> cat test.sh
for i in $(seq 1000) ; do
ls > /dev/null
done
> time mksh test.sh
0.21user 0.65system 0:07.64elapsed 11%CPU (0avgtext+0avgdata 1884maxresident)k
0inputs+0outputs (0major+119632minor)pagefaults 0swaps
> time bash test.sh
0.15user 1.04system 0:08.66elapsed 13%CPU (0avgtext+0avgdata 2816maxresident)k
0inputs+0outputs (0major+150700minor)pagefaults 0swaps
๊ฒฐ๊ตญ mksh
๊ฐ ์ฌ์ ํ ๊ฐ์ฅ ๋น ๋ฅด์ง๋ง ์ด์ fish
๊ฐ mksh
๋ณด๋ค ๋น ๋ฅด๋ค๋ ๊ฒ์ด ์ธ์์ ์
๋๋ค. fish
์ ๋ณ๋ ฌ ๋ช
๋ น ์คํ ์ง์์ด ๋ด์ฅ๋์ด ์์๋ค๋ฉด ๊ฐ์ฅ ๋นจ๋์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
0.66 ์ฌ์ฉ์ ์๊ฐ์ ์๋นํ ๋์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๋ณ์นญ ๋ฑ์ ์ ์ํ๋ config.fish ๋ด์ฉ ๋๋ฌธ์ด๋ผ๊ณ ์ถ์ธกํฉ๋๋ค. ๊ธฐ๋ก์ ์ํด ์ด๊ฒ์ ๋ด Linux ์์์์ ๋ณผ ์ ์๋ ๊ฒ์ ๋๋ค(๊ฐ๊ฐ 3๊ฐ ์ค ์ต๊ณ ).
> time fish test.fish
0.15user 1.21system 0:01.33elapsed...
> time mksh test.mksh
0.12user 1.13system 0:01.24elapsed...
> time bash test.sh
0.18user 1.34system 0:01.47elapsed...
๋ชจ๋๊ฐ ๋งค์ฐ ๊ฐ๊น์ต๋๋ค.
๋ชจ๋ ๋ฒค์น๋งํฌ๊ฐ ์ผ๋ถ ๊ฒฝ๋ก ๋ช ๋ น์ ๋ํด fork/exec ๋๋ posix_spawn์ ์ํํ๋ ์ผ์ข ์ "oracular shell"์ ํตํฉํ๋ ๊ฒ์ด ํฅ๋ฏธ๋ก์ธ ์ ์์ผ๋ฏ๋ก OS๊ฐ ์ ๊ณตํ ์ ์๋ ์ต๋ ์๋์์ ์ผ๋ง๋ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์๋์ง ์ ์ ์์ต๋๋ค. .
@ridiculousfish , ๋ด config.fish๋ ๋งค์ฐ ์งง์ต๋๋ค.
# Solarized colors
test $SHLVL = 2
and sh $HOME/.config/base16-shell/base16-solarized.dark.sh &
set fisher_home ~/.local/share/fisherman
set fisher_config ~/.config/fisherman
source $fisher_home/config.fish
์๋ง๋ fisherman
์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋๋ ค์ง์ง ํ์คํ์ง ์์ต๋๋ค. @bucaran ์ ์ด๊ฒ์ ๋ํ ์ข์ ์ฌ๋์
๋๋ค. ์ด๋ฒ์๋ config.fish
๋น์ ์ต๋๋ค (5๋ฒ์ ์ฌ์๋ ์ค ์ต์์ ๊ฒฐ๊ณผ).
> time fish test.fish; time mksh test.sh; time bash test.sh
0.62user 1.09system 0:07.28elapsed 23%CPU (0avgtext+0avgdata 4396maxresident)k
0inputs+0outputs (0major+108240minor)pagefaults 0swaps
0.21user 0.62system 0:06.92elapsed 11%CPU (0avgtext+0avgdata 1888maxresident)k
0inputs+0outputs (0major+116674minor)pagefaults 0swaps
0.29user 0.81system 0:07.78elapsed 14%CPU (0avgtext+0avgdata 2780maxresident)k
0inputs+0outputs (0major+145628minor)pagefaults 0swaps
@ridiculousfish @pickfire ๋ด๊ฐ ๋น์ ์ ๋ฉ์์ง๋ฅผ ์ฐจ๋จํ ์ ์๋๋ก ๋ค๋ฅธ ๋ฌธ์ ์์ ์ฑํ ํ ์ ์์ต๋๊น?
์, ์ด ๋ฌธ์ ์ ์คํธ์ ๋ณด๋ด์ ์ฃ์กํฉ๋๋ค. @pickfire ํนํ ํฅ๋ฏธ
bash ๋ฐ zsh ํธํ์ฑ์ ๋ํด ๊ฐ์ธ์ ์ผ๋ก ์์ ํ ํธํ์ฑ์ ๊ธฐ๋ํ์ง๋ ์์ง๋ง ํธํ์ฑ์ด ์ถ๊ฐ๋ ๋๋ง๋ค ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ ์ธ๊ธฐ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์คํฌ๋ฆฝํ
์ ๊ณ ๋ คํ์ง ์๋๋ผ๋ &&
๋ฐ ||
๋ ๋ช
๋ น์ ์ฐ๊ฒฐํ๋ ๋ฐ ๋งค์ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ค์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด #2292์ ์ฌ์ ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๋ฌผ๊ณ ๊ธฐ ๋ฒ๋ ๊ฐ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ์ฌ์ค์ ๋ฌผ๊ณ ๊ธฐ ํธํ์ฑ์ ๊ฐ์ ํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ค๋ ๊ฒ์
๋๋ค.
์ ๋ ์ฌ๊ธฐ maxfl๊ณผ ํจ๊ป ์์ต๋๋ค. :-1: ||
๋ฐ &&
๋ฅผ ๋ฌผ๊ณ ๊ธฐ ๊ตฌ๋ฌธ์ ์ผ๋ถ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ธ๊ธฐ ์๋ ํฌํ์ธ ๊ฒฝ์ฐ์
๋๋ค.
๋ฌผ๊ณ ๊ธฐ๋ bash(๋๋ zsh)๊ฐ ์๋๋๋ค. &&
๋ฐ ||
์
ธ๊ณผ์ ํธํ์ฑ์ ์ ์ธํ๊ณ ๋ ๊ตฌํํด์ผ ํ ๊ฐ๋ ฅํ ์ด์ ๊ฐ ์์ต๋๋ค. ํ์ ์ ์ง์์ ํธํ์ฑ์ ์ด ํ๋ก์ ํธ์ ๋ฐ๋ ๋ชฉํ์
๋๋ค.
@Nodd : ๋ฌธ์ #2292์ ๋ํ ์ธ๊ธ์ ์ค์ ๋ก ๋ฌผ๊ณ ๊ธฐ๊ฐ ํด๋น ๊ตฌ๋ฌธ์ ๊ตฌํํ์ง ์์์ผ ํ๋ ์ด์ ์ ๋ํ ์์ ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ ์ฌ๋๋ค์ด ๋ฌผ๊ณ ๊ธฐ๊ฐ POSIX(bash, zsh ๋ฑ) ํด๋ก ์ด๋ผ๊ณ ์๊ฐํ๊ฒ ๋ง๋๋ ๋ ๋ค๋ฅธ ๋จ๊ณ๊ฐ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ค๋ฅธ ์ง์ญ์ ๊ป์ง์ฒ๋ผ ํ๋ํ๋๋ก ์๊ตฌํ๋ ๋ค๋ฅธ ์๊ตฌ ์ฌํญ์ ์์ฑํ ๋ฟ์ ๋๋ค.
์๋ฃจ์ ์ ์ฐพ๊ณ ์๋ ๋ชจ๋ ์ฌ๋๋ค์ ์ํด fish 2.3 ์ดํ๋ก ๋ง์นจ๋ด ์์ ํ ์๋ํ๋ ์๋ฃจ์ ์ด ์์์ ํ์ธํ ์ ์์ต๋๋ค.
์์ ๋ต๋ณ์์ ์ธ๊ธํ ๋๋ก ์ํํ์ญ์์ค.
์ฌ๊ธฐ ์์ต๋๋ค. PR #1633์ด ๋์ฐฉํ๋ฉด ๋ค์์ ๊ฐ์ ธ์์ ~/.config/fish/functions/fish_user_key_bindings.fish์ ์ ์ฅํ ์ ์์ต๋๋ค.
function handle_input_bash_conditional --description 'Function used for binding to replace && and ||'
# This function is expected to be called with a single argument of either & or |
# The argument indicates which key was pressed to invoke this function
if begin; commandline --search-mode; or commandline --paging-mode; end
# search or paging mode; use normal behavior
commandline -i $argv[1]
return
end
# is our cursor positioned after a '&'/'|'?
switch (commandline -c)[-1]
case \*$argv[1]
# experimentally, `commandline -t` only prints string-type tokens,
# so it prints nothing for the background operator. We need -c as well
# so if the cursor is after & in `&wat` it doesn't print "wat".
if test -z (commandline -c -t)[-1]
# Ideally we'd just emit a backspace and then insert the text
# but injected readline functions run after any commandline modifications.
# So instead we have to build the new commandline
#
# NB: We could really use some string manipulation operators and some basic math support.
# The `math` function is actually a wrawpper around `bc` which is kind of terrible.
# Instead we're going to use `expr`, which is a bit lighter-weight.
# get the cursor position
set -l count (commandline -C)
# calculate count-1 and count+1 to give to `cut`
set -l prefix (expr $count - 1)
set -l suffix (expr $count + 1)
# cut doesn't like 1-0 so we need to special-case that
set -l cutlist 1-$prefix,$suffix-
if test "$prefix" = 0
set cutlist $suffix-
end
commandline (commandline | cut -c $cutlist)
commandline -C $prefix
if test $argv[1] = '&'
commandline -i '; and '
else
commandline -i '; or '
end
return
end
end
# no special behavior, insert the character
commandline -i $argv[1]
end
function fish_user_key_bindings
bind \& 'handle_input_bash_conditional \&'
bind \| 'handle_input_bash_conditional \|'
end
@Globegitter
๊ทธ๋ฅ ์ด์ฉ์ง?
function sudo_bang_bang --on-event fish_postexec
abbr !! sudo $argv[1]
end
@brj ๋ํ ~/.config/fish/functions/fish_user_key_bindings.fish
๋ฃ์ต๋๊น? ๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ํธ๋ฆญ์ํ์ง ์๋ ๊ฒ ๊ฐ์์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ์์ฑํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ต์ ์ config.fish์ ๋ฃ๊ฑฐ๋ ~/.conf.d/[name-dont-matter].fish์ ๋ฃ๋ ๊ฒ์ ๋๋ค.
@brj : ํด๋น ๊ธฐ๋ฅ์ ๋ํ ์๋ชป๋ ๋ฌธ์ ์ ๋๋ค. ์ด๊ฒ์ "!!"๊ฐ ์๋๋ผ "&&" ๋ฐ "||"์ ๊ดํ ๊ฒ์ ๋๋ค. - ๋ค๋ฅธ ๊ฒ๋ค.
@faho lol, ๋น์ ์ด ๋ง์ต๋๋ค. ๋๋ ํญ์ ๊ทธ ๋ฌธ์ ์์ ์๋ฆผ์ ๋ฐ์ ์ด๊ฒ์ด sudo์ ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ผ๊ณ ์๊ฐํ์ต๋๋ค !!.
@Globegitter ํผ๋์ ๋๋ ค ์ฃ์กํฉ๋๋ค!
์ฌ์ฉ์๊ฐ ํธ๋ฆฌํ๊ฒ ๋ณต์ฌํ ์ ์๋๋ก ์ ์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ฌผ๊ณ ๊ธฐ์ ํจ๊ป ๋ฐฐ์กํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ์ค๋ฅ ๋ฉ์์ง๋ ์ด๊ฒ์ ์ธ๊ธํ๊ธฐ ์ํด ์ฝ๊ฒ ์ฆ๊ฐ๋ ์ ์์ต๋๋ค. ๋๋ ๊ฑฐ์ ๋ชจ๋ ์ ธ(unix-y ์ ธ ์ธ์ Windows cmd.exe ํฌํจ)์์ ์๋ํ๊ธฐ ๋๋ฌธ์ &&๊ฐ ์ฌ์ฉ๋๋ ๋์ผํ ๋ผ์ด๋(gerrit ์ฝ๋ ๊ฒํ ์์)๋ฅผ ๊ณ์ ๋ถ์ฌ๋ฃ์ต๋๋ค. ๋์๊ฒ ์์์ ์ธ๊ธํ ์คํฌ๋ฆฝํธ๋ ์์ฐ์ฑ ํฅ์ ๋๊ตฌ์ ๋๋ค(๋๋ ์ ์ ๋์ bash -c "paste here"๋ฅผ ์ ๋ ฅํ์ต๋๋ค...).
&&๋ ์ด๋ป๊ฒ ํ๋์? ํด์๋๊ฐ ์์ต๋๊น?
์์ ๊ฐ์ ๋ฌธ์ ์ธ๋ฐ ์ ๋ง ๋ฐฉ๋ฒ์ด ์๋ค์
gcc test2.c -o a.out && ./a.out
๋ฌผ๊ณ ๊ธฐ์์.
gcc test2.c -o a.out; and ./a.out
@ivan ์ ๊ทธ๊ฒ์ ์๋ํ์ง๋ง "and"์ "./a.out"์ gcc์ ๋ํ ์ธ์๋ก ์ ๊ณตํฉ๋๋ค.
//ํธ์ง: ๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ๋๋ bash ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค. ์๋ํ๋ฉด ์ด๊ฒ์ ๋ฌผ๊ณ ๊ธฐ์์ ์์ ํ ๋ถ๊ฐ๋ฅํ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋๋ค :(
gcc test2.c -lwlc -o a.out && (( sleep 2s; DISPLAY=:2 xterm ) & ./a.out)
๋๋ ์ด "์์ ํ ๋ถ๊ฐ๋ฅํ" ์ผ์ ์์ฃผ ์์ฃผ ํ๋ค. ๊นจ๋ํ ๋ฌผ๊ณ ๊ธฐ ํ๊ฒฝ์์ ; and
๊ตฌ๋ฌธ์ ์ฌ์ฉํด ๋ณด๊ฒ ์ต๋๊น? ์๋ํ์ง ์์ผ๋ฉด ์ธ๋ฏธ์ฝ๋ก ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์
๋๊น? ์ด๊ฒ์ ๋ฌผ๊ณ ๊ธฐ์ ์
๋ ฅํ๊ณ ์์ต๋๊น, ์๋๋ฉด ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์์ ์ ๋ฌํ๊ณ ์์ต๋๊น?
@ivan ์ ๋ ฅํฉ๋๋ค.
์ด๋ฆฌ์์ ์ง๋ฌธ์ ์ฃ์กํ์ง๋ง ๊ดํธ๋ ์ด๋ป๊ฒ ํ๋์? ๋ฌธ์์์ ๊ทธ์ ๋ํ ๋จ์ด๋ฅผ ์ฐพ์ ์ ์์ผ๋ฉฐ ์ ํํ Google ๊ฐ๋ฅํ ์ฃผ์ ๊ฐ ์๋๋๋ค.
gcc test2.c -lwlc -o a.out && (( sleep 2s; DISPLAY=:2 xterm ) & ./a.out)
@kozec ์ฌ๊ธฐ์์ ํญ๋ชฉ์ ๊ทธ๋ฃนํํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋น์ ์ด ์ฌ์ฉํด์ผ ํ๋ ๊ฒ์ ์ผ์ชฝ ์ค๊ดํธ์ ๊ฐ์ begin
์ด๊ณ (์ ๊ฐ ์๊ฐํ๋ ๋ฐฉ์์
๋๋ค) ์ค๋ฅธ์ชฝ ์ค๊ดํธ์ ๊ฐ์ end
์
๋๋ค.
gcc test2.c -lwlc -o a.out; and begin sleep 2s; env DISPLAY=:2 xterm; end & ./a.out
๋๋ ๋ค์ฌ์ฐ๊ธฐ:
gcc test2.c -lwlc -o a.out
and begin sleep 2s
env DISPLAY=:2 xterm
end & ./a.out
@floam ๊ฐ์ฌํฉ๋๋ค. ๊ฑฐ์ ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ & ์ด์ ์ ๊ฒ๋ค์ ๋ฐฐ๊ฒฝ์ผ๋ก ๋ณด๋ด์ง์ง ์์ต๋๋ค :(
์ต์ํ์ ์:
begin sleep 2s ; env DISPLAY=:2 xterm ; end & Xephyr :2
2์ด ํ์ xterm์ ์์ํ๊ณ _๊ทธ๋_ ํด๋น xterm์ ๋ํด XServer๋ฅผ ์์ํฉ๋๋ค. XServer๊ฐ ์ค๋น๋๊ธฐ ์ ์ xterm of๊ฐ ์ถฉ๋ํฉ๋๋ค.
์, ์ฃ์กํฉ๋๋ค. ๋ฌธ์ : https://github.com/fish-shell/fish-shell/issues/238
๋น์ ์ ๋น์ ์ด ํด์ผ ํ๋ ๊ณณ์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
fish -c 'sleep 2s; env DISPLAY=:2 xterm' & Xephyr :2
๋ง์ ์์ ๊ธฐ์กด ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฐ๋ฐ, ๋น๋ ๋ฐ npm ์คํ ์คํฌ๋ฆฝํธ ๋ด๋ถ์์ ์ ํํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด์ง ์์ต๋๋ค. ํนํ ์ผ๋ถ/๋๋ถ๋ถ์ด ๋ฌผ๊ณ ๊ธฐ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. shebang์ด ์๋ ์ผ๋ฐ bash ์คํฌ๋ฆฝํธ์ ๊ฒฝ์ฐ ๋ฌผ๋ก ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
&&์ ์ข์(๋๋ "์ข์") ์ ์ Linux ๋ฐ Mac๋ฟ๋ง ์๋๋ผ Windows์์๋ ์ผ๋ฐ ์ ธ์์ ์๋ํ๋ฏ๋ก ๊ฐ๋ฐ ํ๊ฒฝ ๋ฑ์ ๋น ๋ฅธ ์ค์ ์ ์ข์ต๋๋ค.
์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก๋ ๊ฑฐ๋ ์ฐจ๋จ๊ธฐ๋ ์๋์ง๋ง ์ถ๊ฐํ๋ ์ด์ ๋ ์ ์ ์์ต๋๋ค.
๊ธ์์, ์ด๊ฒ์ ๋ค์ ์ด๋ฆฌ์์ ์ฃผ์ฅ์ ๋๋ค. ๋ฌผ๊ณ ๊ธฐ ์ปดํ์ผ๋ฌ์ ๋ํด ๋ค๋ฅธ "๋ชจ๋"๊ฐ ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ฆ, "์์ํ" ์์ ์ฌ๋ฃ๋ฅผ ๊ฐ์ง ์ ์๋ ์ค์ ๋๋ ์์ ํน์ง๊ณผ ํจ๊ป bash์ ๊ฐ์ ๊ป์ง๊ณผ์ ํธํ์ฑ์ ๊ฐ์ง ์ ์๋ ์ผ์ข ์ ์ค์ ์ ๋๋ค. ๋ค๋ฅธ ์์ ๋ํด ๋ค๋ฅธ "์์ค"์ ํธํ์ฑ์ ๊ฐ์ง ์๋ ์์ผ๋ฏ๋ก ์์ ํ ํธํ์ฑ, ํธํ์ฑ ์์ ๋๋ ๊ทธ ์ฌ์ด์ ๋ฌด์ธ๊ฐ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ๋ด ๋ง์, ๊ธฐ๋ณธ ์์ค์์ ์ต์ํ ์ด๋ฅผ ์ํด ์ผ์ข ์ ์์ค ๋ ์์ค ์ปดํ์ผ๋ฌ๋ฅผ ๊ตฌํํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋๋ bash ์ฝ๋๋ฅผ ๊ฐ์ ธ์ ๋ฌผ๊ณ ๊ธฐ์ ๋ํ ๋ด๋ถ ์ค๊ฐ ํํ์ผ๋ก ๋ณํํฉ๋๋ค. ์ด์ ๊ด๋ จํ์ฌ ๋ฒ์ญ์ ์ํด ๋ชจ๋ ์ข ๋ฅ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ์ ํ์ง๋ง bash et al. ๋ฌผ๊ณ ๊ธฐ ๋ ๋ฌผ๊ณ ๊ธฐ๋ ์ธ๊ณ๋ฅผ ๋คํ๋ค ์ ๋๋ก ๋ค๋ฅด์ง ์์ต๋๊น?
์ด์จ๋ , ์ด๊ฒ์ ๋ค์์ ์ ์ ๋ก ํ๊ธฐ ๋๋ฌธ์ ์ ๋ง ์ด๋ฆฌ์์ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ์ด ๋ฌธ์ ์ ๋ํ ์ 0.02๋ฌ๋ฌ์ ๋๋ค.
"pure fish"
XOR
"compatibility with bash / becoming another bash clone"
์ด ๋ ๊ฐ๋ ์ฌ์ด์ ์ค๊ฐ ์ง์ ์ ๊ฐ๋ ๊ฒ์ ๋ฐฉํดํ๋ ๊ฒ์ด ์์ ๋.
์ต์ํ bash์ ๊ฐ์ ์กฐ๊ฐ๋ ๋ฌผ๊ณ ๊ธฐ์ ๊ฐ์ ๋ํดํ ์กฐ๊ฐ๋ณด๋ค ํจ์ฌ ๋ ํ์ค์ ์ด๊ณ ๋์ค์ ์ด๋ผ๋ ํ์ค์ ์ง์ํด์ผ ํฉ๋๋ค. - ๋๋ฆฌ ๋ณด๊ธ๋๊ณ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ผ์ผํค์ง ์๋๋ค๋ ์ ์์ bash์ ๋๋ฑํฉ๋๋ค.
...์ด ๋ ๊ฐ๋ ์ฌ์ด์ ์ค๊ฐ ์ง์ ์ ๊ฐ๋ ๊ฒ์ ๋ฐฉํดํ๋ ๊ฒ์ด ์์ ๋.
ํ์ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ 2,000์๊ฐ(1์ธ 1๋ ) ์ด์ ํฌ์ํ๋ ์ฌ๋(๋๋ ์ฌ๋๋ค์ ๊ทธ๋ฃน) ์ธ์๋ ์๋ฌด ๊ฒ๋ ์์ต๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ ๊ตฌํํ๊ธฐ ์ํด @ylluminarious ๋์ pull-request๋ฅผ ๊ฒํ ํ๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค. ๋น์ ์ด ์ ์ํ๋ ๊ฒ์ ์ ๋๊ตฐ๊ฐ๊ฐ Python๋ PHP๋ฅผ ํด์ํ๋๋ก ๋ง๋ค ์ ์๋์ง ๋ฌป๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ๋๋ต์ ์ด๋ก ์ ์ผ๋ก ๊ทธ๋ ๊ฒ ํ๊ธฐ ์ํด ํธํ์ฑ ์ค์์น๋ฅผ ๊ฐ์ง ์ ์์ง๋ง ์ ๊ทธ๋ ๊ฒ ํ์๊ฒ ์ต๋๊น?
#4620์์ ๊ตฌํ๋์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
||
๋ ์ข์ ๊ฒ์ ๋๋ค.