Command-line Options

위의 Shell Options 메뉴에서 소개된 옵션외에 다음과 같은 옵션들을 명령 라인에서 사용할 수 있습니다.

-c

sh -c 'command ...' arg1 arg2 형식으로 실행할 수 있습니다.
이때 command 에서 $0 값은 arg1 이 되고 $1 값은 arg2 가 됩니다.

$ sh -c 'echo $0 $1 $2' 111 222 333
111 222 333

# for 문에서는 인수가 $1 부터 출력되므로 111 은 표시되지 않는다.
$ sh -c 'for arg in "$@"; do echo $arg; done' 111 222 333
222
333

# 다음과 같이 임의의 인수 X 를 추가해야 111 이 $1 자리에 배정된다.
$ sh -c 'for arg in "$@"; do echo $arg; done' X 111 222 333
111
222
333
-----------------------------------------------

$ sh -c "$( curl -fsSL http://gef.blah.cat/sh )"
. . .

-i

interactive shell 을 만들 때 사용합니다.

-l

login shell 을 만들 때 사용합니다.

-r

bash 가 제한된 환경에서 실행되게 합니다. ( 아래 RESTRICTED SHELL 참조 )

-s

스크립트를 stdin 으로부터 읽어들여 실행합니다. 이때 positional parameters 를 설정할 수 있습니다.

$ bash <<\EOF -s foo bar zoo
echo $1, $2, $3
echo $#
EOF

foo, bar, zoo
3
$ cat test.sh
#! /bin/bash

echo -------------
echo arg1 : $1
echo arg2 : $2
echo =============

# $1, $2 값으로 -P, chefdk 가 설정된다.
$ cat test.sh | bash -s -- -P chefdk
-------------
arg1 : -P
arg2 : check
=============

$ curl -L https://chef.io/chef/install.sh | sudo bash -s -- -P chefdk

-v

Makefile 에서와 같이 실행 전에 먼저 명령문을 출력합니다.

$ env -i bash -v -c 'echo "-v option"' 

echo "-v option"
-v option

-D

메시지 localization 을 위해 $"..." quotes 을 이용해 작성한 스트링을 stdout 으로 출력합니다. 기본적으로 -n ( noexec ) 옵션을 포함하므로 명령이 실행되지는 않습니다.

[-+]O [shopt_option]

shopt 명령으로 설정하는 bash 옵션을 명령 라인에서 -O 옵션명 ( O 는 대문자 ) 을 이용해 설정하거나 +O 옵션명 을 이용해 해제할 수 있습니다.

$ bash -c 'shopt' | grep "globstar\|lastpipe"
globstar        off
lastpipe        off

$ bash -O globstar -O lastpipe -c 'shopt' | grep "globstar\|lastpipe"
globstar        on
lastpipe        on

Multi-character options

이 long 옵션은 bash 에서 사용되는 옵션으로 사용할 때는 single-character options 앞에 위치해야 오류가 발생하지 않습니다.

--debugger

extdebug 옵션을 turn on 합니다.

--dump-po-strings

-D 옵션과 같은 것인데 GNU gettext po ( portable object ) file format 으로 출력합니다. 기본적으로 -n ( noexec ) 옵션을 포함하므로 명령이 실행되지는 않습니다.

--dump-strings

-D 옵션과 동일합니다.

--help

help 메시지를 출력합니다.

--init-file file 또는 --rcfile file

interactive shell 에서 /etc/bash.bashrc, ~/.bashrc 파일을 실행하는 대신에 --rcfile 옵션에서 설정한 파일을 실행합니다.

--login

-l 옵션과 같은 것입니다.

--noediting

interactive shell 에서 readline 기능을 사용하지 않습니다.

--noprofile

login shell 에서 /etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profile 파일을 읽어들이지 않습니다.

--norc

interactive shell 에서 /etc/bash.bashrc, ~/.bashrc 초기화 파일을 실행하지 않습니다.
sh 의 경우는 이옵션이 디폴트 입니다.

만약에 parent process 로부터 전달되는 환경변수도 empty 로 만들려면 다음과 같이하면 됩니다.

$ env -i bash --norc

# login shell 의 경우
$ env -i bash --login --noprofile --norc

--posix

bash 가 posix 기준을 따르는 모드로 실행되게 합니다.

--restricted

bash 가 제한된 환경에서 실행되게 합니다. ( 아래 RESTRICTED SHELL 참조 )

--verbose

-v 옵션과 같은 것입니다.

--version

버전 정보를 출력합니다.

RESTRICTED SHELL

bash 를 실행할 때 -r 옵션을 사용하거나 rbash 명령을 사용하면 제한된 환경에서 실행이 됩니다. 제한된 환경은 startup 파일을 읽은 후에 적용되며 아래와 같은 항목들을 사용할 수 없게 됩니다. 하지만 새로운 bash 또는 sh 이 실행되면 제한이 없어지기 때문에 주로 chroot 와 함께 사용됩니다.

  • changing directories with cd

  • setting or unsetting the values of SHELL, PATH, ENV, or BASH_ENV

  • specifying command names containing /

  • specifying a filename containing a / as an argument to the . builtin command

  • specifying a filename containing a slash as an argument to the -p option to the hash builtin command

  • importing function definitions from the shell environment at startup

  • parsing the value of SHELLOPTS from the shell environment at startup

  • redirecting output using the >, >|, <>, >&, &>, and >> redirection operators

  • using the exec builtin command to replace the shell with another command

  • adding or deleting builtin commands with the -f and -d options to the enable builtin command

  • using the enable builtin command to enable disabled shell builtins

  • specifying the -p option to the command builtin command

  • turning off restricted mode with set +r or set +o restricted.