ã·ã§ã«ãšã¯
æ¬é£èŒã§ã¯ãããããashãŸãã¯dashã«ã€ããŠããã®æ©èœã説æããŠããããããã¯/bin/shãšããŠãããã€ãããŠããããšãå€ããIEEE Std 1003.1ïŒPOSIX.1ïŒã®ä»æ§ã«ã ãã¶è¿ãã/bin/shã®å®è£ ç³»ãashãdashã§ã¯ãªãbashã ã£ããšããŠããbashèªäœãashãdashã®æ©èœãå«ãã§ãããããashãdashã®æ©èœãææ¡ããŠããã°ãã®ãŸãŸbashã§ã䜿çšã§ããã以éã§ã¯ashãdashã«çžåœããå®è£ ç³»ããshããšåŒã¶ããšã«ããã
shã¯ãã·ã§ã«ããšåŒã°ããçš®é¡ã®ãœãããŠãšã¢ã®1ã€ã ãã·ã§ã«ã¯ããŠãŒã¶ãŒããã°ã€ã³ãããšãã«æåã«å®è¡ããããœãããŠãšã¢ã§ããããŠãŒã¶ãŒããå ¥åãããè¡ããŒã¿ãè§£éããåœä»€ãå®è¡ãããå ¥åã¯ãŠãŒã¶ãŒããã®ã¿ãªããããã¡ã€ã«ãã1è¡ãã€ããŒã¿ãèªã¿èŸŒãã§åŠçããããšãã§ãããå Žåã«ãã£ãŠåè ã®äœ¿ãæ¹ã¯ãã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ããåŸè ã®äœ¿ãæ¹ã¯ãã·ã§ã«ã¹ã¯ãªããããšåŒã°ããããšãããããŠãŒã¶ãŒã察話çã«äœ¿çšããã·ã§ã«ãã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ã§ããããã¡ã€ã«ã«æžã蟌ãŸããã³ãã³ããå®è¡ããŠããã®ãã·ã§ã«ã¹ã¯ãªããã ã
ã·ã§ã«ã¯ããŠãŒã¶ãŒãã€ã³ã¿ã©ã¯ãã£ãã«æäœããããšãè£å©ããããã«ã³ãã³ãå±¥æŽæ©èœãè¡ç·šéæ©èœãæäŸããŠããããŸããããã°ã©ãã³ã°èšèªçã«å©çšããããã«å¶åŸ¡æ§æããã¯ãæ©èœãªã©ãæäŸããŠãããã·ã§ã«ã¯ã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠããã·ã§ã«ã¹ã¯ãªãããšããŠãå©çšã§ãããšããç¹åŸŽãåããŠããããã®æ©èœã¯Pythonã«ãååšããŠãããã®ã ã
ãªãããŠãŒã¶ãŒã®ãã°ã€ã³æã«å®è¡ãããã·ã§ã«ã¯chsh(1)ã³ãã³ããªã©ã䜿ãããšã§å€æŽã§ããã
ã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«
shã¯ãã·ã§ã«ã®æšæºå ¥åã端æ«ã«æ¥ç¶ãããŠããå ŽåããŸãã¯-iãªãã·ã§ã³ãæå®ãããŠããå Žåã«äœãåŒæ°ãæå®ããªãã§å®è¡ãããšãã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠåäœãããã€ãŸãããŠãŒã¶ãŒã察話çã«ã³ãã³ããå ¥åããŠåäœããã¢ãŒããšããŠæ¯ãèãããšã«ãªãããã ã
ã·ã§ã«ã¯ãã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠåäœããå ŽåããŠãŒã¶ãŒããå ¥åãåããå Žæã®åéšåã«ããã³ãããšåŒã°ããæååã衚瀺ãããæ¬¡ã®ç»é¢ã®å Žåãè¡é ã«è¡šç€ºãããŠããã$ ããããã³ããã§ããã
![]() |
è¡é ã®ã$ ããããã³ãããã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠåäœããŠããsh |
ãŠãŒã¶ãŒããã°ã€ã³ãããšãã«ã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠshãèµ·åãããå Žåããã®ã·ã§ã«ã¯ãã°ã€ã³ã·ã§ã«ãšèŠãªãããïŒåŒæ°0ã調ã¹ããã®éšåãããã·ã¥ã«ãªã£ãŠãããšãã°ã€ã³ã·ã§ã«ãšãªãããã®ã·ã§ã«ã¯ãã·ã¹ãã åŽããã°ã€ã³æã«èªåçã«æå®ããããšã«ãªãïŒããã°ã€ã³ã·ã§ã«ã¯/etc/profileãèªã¿èŸŒããšãšãã«ãç¶ããŠ~/.profileã®å 容ãèªã¿èŸŒãããã®ãã¡ã€ã«ã«ã¯ãshã®èšå®ãç°å¢å€æ°èšå®ãªã©ãå«ãŸããŠãããããã©ã«ãã®æåãæ±ºããããšã«ãªãã
ã·ã§ã«ã¹ã¯ãªãã
shã®æåã®ãªãã·ã§ã³ã§ã¯ãªãåŒæ°ã¯ãã¡ã€ã«ãžã®ãã¹ãšè§£éããããã®ãã¡ã€ã«ã®å 容ãèªã¿èŸŒãã§åŠçããããã«ãªãããã®å ŽåãåŒæ°ãšããŠæž¡ããããã¡ã€ã«ã¯ã·ã§ã«ã¹ã¯ãªãããšåŒã°ããããã«ãªãã以äžã®å Žåãshã«æž¡ããããhelloãã¯ã·ã§ã«ã¹ã¯ãªãããšããããšã«ãªãã
$ cat hello
echo 'Hello World!'
$ sh ./hello
Hello World!
$
ã·ã§ã«ã¹ã¯ãªãããã¡ã€ã«ã®å é ã«ã#!/bin/shããšããæååãæžã蟌ãã§ãããšããã®ãã¡ã€ã«åäœã§ã·ã§ã«ã¹ã¯ãªãããšããŠå®è¡ã§ããããã«ãªããããã¯ã·ã§ã«ã®æ©èœã§ã¯ãªãã«ãŒãã«ã®æ©èœã§ãã«ãŒãã«ã¯ãã¡ã€ã«ã®å é ãã#!/bin/shãã®ãã¡ã€ã«ãå®è¡ããå Žåãã/bin/sh ãã®ãã¡ã€ã«ã®ãã¹ãã®ããã«å®è¡ãããã€ãŸããã«ãŒãã«ãåè¿°ããå®è¡åŠçã代æ¿ããŠè¡ã£ãŠãããããã§ããã
$ cat hello.sh
#!/bin/sh
echo 'Hello World!'
$ ls -l hello.sh
-rwxr-xr-x 1 daichi staff 31 6æ 11 10:46 hello.sh
$ ./hello.sh
Hello World!
$
ã·ã§ã«ã¹ã¯ãªããã§ãã¡ã€ã«ãã¹ä»¥éã«æå®ãããåŒæ°ã¯ãäœçœ®ãã©ã¡ãŒã¿ïŒ$1ã$2ã$3 âŠïŒãšããŠã¢ã¯ã»ã¹ã§ããã
ãã®ããã«ã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ããŸãã¯ã·ã§ã«ã¹ã¯ãªãããšããŠå®è¡ãããšããã®ãã·ã§ã«ã®åºæ¬çãª2ã€ã®äœ¿ãæ¹ã ã
ã³ãã³ãåŒæ°
shã¯ãªãã·ã§ã³ãæå®ããããšã§æåãå€ããããšãã§ãããæå®ã§ãããªãã·ã§ã³ã¯å®è£ ç³»ããšã«ç°ãªããã倧äœå ±éã§çšæãããŠãããªãã·ã§ã³ããŸãšãããšæ¬¡ã®ããã«ãªãã
| ãªãã·ã§ã³ | å 容 |
|---|---|
| -a | èµ·åæã«å šãŠã®ç°å¢å€æ°ãåŒãç¶ã |
| -C | æ¢åã®ãã¡ã€ã«ã>ã§äžæžãããªã |
| -c æåå | ã³ãã³ããæå®ãããæååããèªã¿åã |
| -e | ã·ã§ã«ã¹ã¯ãªãããšããŠåäœããŠããå Žåãã³ãã³ãã倱æããå Žåã«å³æã«ã·ã§ã«ãçµäºããããã ããifãelifãwhileãuntilã&&ã||ã!ãªã©ã®ããŒã¯ãŒããšåãããŠäœ¿ãããŠããå Žåã«ã¯ãã®éãã§ã¯ãªã |
| -f | ãã¹åå±éãç¡å¹å |
| -I | ã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠåäœããŠããå Žåãå ¥åããã®EOFãç¡èŠ |
| -i | ã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠåäœããã |
| -p | ç¹æš©ã¢ãŒããæå¹å |
| -s | ã³ãã³ããæšæºå ¥åããèªã¿åã |
| -v | æšæºå ¥åããèªã¿èŸŒãã ããŒã¿ãæšæºãšã©ãŒåºåãžæžãåºãïŒãããã°åãæ©èœïŒ |
| -x | åã³ãã³ããå®è¡ããåã«æšæºãšã©ãŒåºåãžæžãåºãïŒãããã°åãæ©èœïŒ |
ãªãã§ããã䜿ãã®ã¯ã-cããšã-sããããã«ã-eãã -vãã -xãã®çµã¿åããã ã-cã-sã¯ããããã³ãã³ããèªã¿èŸŒãå ãæå®ãããªãã·ã§ã³ã§ããã-cã¯å®è¡ããã³ãã³ããçŽæ¥åŒæ°ã«æååãšããŠæå®ãã-sã¯å®è¡ããã³ãã³ããæšæºå ¥åããååŸãããšããæå®ã«ãªãã
âãsh -cãã®å®è¡ãµã³ãã«
$ sh -c "echo Hello World!"
Hello World!
$
âãsh -sãã®å®è¡ãµã³ãã«
$ echo "echo Hello World!" | sh -s
Hello World!
$
ããŸãç¥ãããŠããªãããã ããã·ã§ã«ã«ã¯ãããã°ã«äœ¿çšã§ãããªãã·ã§ã³ãšããŠã-eãã-vãã-xããçšæãããŠããã-eã¯ã³ãã³ãã倱æããå Žåã«å³åº§ã«ã·ã§ã«ãçµäºãããªãã·ã§ã³ã-vã¯å ¥åæã«ã³ãã³ãã©ã€ã³ã衚瀺ããã³ãã³ãã-xã¯å®è¡åã«ã³ãã³ãã©ã€ã³ã衚瀺ããã³ãã³ãã ããŸãã-vãš-xã®çµã¿åããã§ã¯ãå±éåŠçååŸã«ã©ã®ãããªã³ãã³ããå®è¡ãããã®ããç¥ãããšãã§ããã -eã-vã-xã®å©çšäŸã¯æ¬¡ã®éãã ã
% sh -e -v -x
$ echo $(date)
echo $(date)
+ date
+ echo $'2019幎' $'6æ11æ¥' $'ç«ææ¥' $'11æ32å56ç§' JST
2019幎 6æ11æ¥ ç«ææ¥ 11æ32å56ç§ JST
$ true
true
+ true
$ false
false
+ false
%
ã·ã§ã«ãåŠã³å§ããã°ããã®æ®µéã§ã¯ããããã®ãªãã·ã§ã³ã䜿ãããšã¯ã»ãšãã©ãªãã ãããããçšåºŠã·ã§ã«ã䜿ããããã«ãªã£ããããã®èŸºãã®ãªãã·ã§ã³ãæãåºããŠå©çšã§ããããã«ãªãã°ããã ããã
ã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšã·ã§ã«ã¹ã¯ãªãã
ã·ã§ã«ã¯ãŠãŒã¶ãŒãæ¯æ¥å¯Ÿè©±çã«äœ¿çšãããœãããŠãšã¢ã§ãããšãšãã«ããã¡ã€ã«ã«æžã蟌ãã§äœ¿çšãããããåŠçåãã®ãœãããŠãšã¢ãšããŠãå©çšããããLinuxãã¯ãããUNIXç³»ã®ãœãããŠãšã¢ã¯ã·ã¹ãã ã®å€ããã·ã§ã«ã¹ã¯ãªããã§çµãã§ãããã·ã§ã«ã¹ã¯ãªãããèªããããã«ãªãããšã¯ãããããã·ã¹ãã ã®åäœãçè§£ããäžã§ã倧åãªããšã ã
ãŸããã·ã§ã«ã®æäœã¹ãã«ã®åäžã¯ããã®ãŸãŸLinuxæäœã®ã¹ãã«åäžãå¹çæ§ã®åäžã«ã€ãªãããæ £ããªããã¡ã¯ãã€ããããããªãããæ £ããŠããããŸãã°å€§ããªæè¡è²¡ç£ãšãªããã®ã ãå°æ¥æ¥œãããããã«ãä»ã¯ã¡ãŸã¡ãŸãšã·ã§ã«ã®æ©èœãèŠããŠãããã
