๐Ÿ’ป ํ”„๋กœ๊ทธ๋ž˜๋ฐ/Linux

#!/bin/bash ๋Œ€์‹  #!/usr/bin/env ์‚ฌ์šฉํ•˜๊ธฐ

๋ฏธ์ธ์ฃผ 2023. 1. 9. 15:54

#!

sharp(#) + bang(!)์˜ ํ•ฉ์„ฑ์–ด, shebang์ด๋ผ ํ•œ๋‹ค.

  • 2byte์˜ ๋งค์ง ๋„˜๋ฒ„(magic number)๋กœ ์ด ์ž์ฒด๊ฐ€ ํ•˜๋‚˜์˜ ๊ธฐํ˜ธ
  • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๋Š” ์—ญํ• 
  • ์ด ๋’ค์— ๋‚˜์˜ค๋Š” ๊ฒƒ์€ ๊ฒฝ๋กœ๋ช…, ๋ช…๋ น์–ด๋“ค์„ ํ•ด์„ํ•  ํ”„๋กœ๊ทธ๋žจ์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋ƒ„
  • ๊ฒฝ๋กœ๊ฐ€ ์ •ํ™•ํ•˜์ง€ ์•Š๋‹ค๋ฉด bad interpreter ๋ฐœ์ƒ
  • ๋‹ค๋ฅธ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ๋ฐœ์ƒ

๋ฌธ๋ฒ•

#!<interpreter> [optional-arg]

#! ๋’ค์— ๊ณต๋ฐฑ์ด ํ•˜๋‚˜ ์žˆ์–ด๋„ ๋™์ž‘
<interpreter>์—๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ ˆ๋Œ€๊ฒฝ๋กœ ์ž…๋ ฅ

์˜ˆ์‹œ

#!/bin/sh
#!/bin/bash
#!/usr/bin/php
#!/usr/bin/python -O
#!/usr/bin/env bash

#!/usr/bin/env

  • interpreter์— ๋“ค์–ด๊ฐˆ ํ”„๋กœ๊ทธ๋žจ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋Š” ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.
    ex) ํŒŒ์ด์ฌ์„ ์˜ˆ๋กœ ๋“ค๋ฉด /bin/local/python ๋˜๋Š” /usr/bin/python์— ์œ„์น˜ํ•  ์ˆ˜๋„ ์žˆ๊ณ 
    ๋ฒ„์ „๋„ python2์™€ python3์ด ๋‘˜๋‹ค ์„ค์น˜๋˜์–ด ์žˆ์„์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋Ÿด ๋•Œ #!/usr/bin/env๋กœ ์„ค์ •ํ•˜๋ฉด ์ ˆ๋Œ€๊ฒฝ๋กœ์— ์ƒ๊ด€์—†์ด ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„์„œ ์‚ดํ–‰
    • env๋Š” ์‚ฌ์šฉ์ž์˜ $PATH(ํ™˜๊ฒฝ๋ณ€์ˆ˜)์—์„œ ์ฒซ๋ฒˆ์งธ๋กœ ์ฐพ์€ ๋ช…๋ น๋ฅผ ์ฐพ์•„์„œ ์‹คํ–‰๋จ
    • ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ผ๋ฉด env ์‚ฌ์šฉํ•˜๊ธฐ

์˜ˆ์‹œ

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ •๋ณด ์ถœ๋ ฅ
env

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ •๋ณด ๋ณ€๊ฒฝ
env -i HOSTNAME=test.com

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ •๋ณด ๋ณ€๊ฒฝ
env -u HOSTNAME

# env ์ด์šฉํ•œ bash ์‹คํ–‰ํ•˜๊ธฐ
/usr/bin/env bash --version

ํ…Œ์ŠคํŠธ

1. vi test ํŒŒ์ผ ์ž‘์„ฑ

#!/usr/bin/env bash

echo "Hello, This is Bash"

2. ์‹คํ–‰ ๊ถŒํ•œ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹คํ–‰

# ๊ถŒํ•œ ์ถ”๊ฐ€
$ chmod +x test

# ์‹คํ–‰
$ ./test
Hello This is Bash

3. ๋‹ค์‹œ ํŒŒ์ผ์„ ์—ด๊ณ  ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ํŒŒ์ด์ฌ์œผ๋กœ ์ง€์ •

#! /usr/bin/env python

echo "Hello This is Bash"

4. ํŒŒ์ด์ฌ ๋ฌธ๋ฒ•์— ๋งž์ง€ ์•Š์•„ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

$ ./test
File "./test", line 3
echo "Hello This is Bash"
^
SyntaxError: invalid syntax

5. ํŒŒ์ผ ์—ด๊ณ  ํŒŒ์ด์ฌ ๋ฌธ๋ฒ•์œผ๋กœ ์ˆ˜์ •

#! /usr/bin/env python

print "Hello This is Python"

6. ํŒŒ์ผ ์‹คํ–‰ํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•จ

$ ./test
Hello This is Python

 

์ฐธ๊ณ 

https://blog.gaerae.com/2015/10/what-is-the-preferred-bash-shebang.html

https://bcp0109.tistory.com/343

https://ingorae.tistory.com/365