답변:
sh
프로그램 sh
을 인터프리터로 호출하고 -c
플래그는이 프로그램이 해석 한대로 다음 명령을 실행하는 것을 의미합니다.
우분투에서는 sh
일반적으로로 연결되어 있습니다 /bin/dash
. 즉 sh -c
, 대시 쉘로 명령을 실행하면 bash 대신 명령을 실행하는 데 사용됩니다. 로 호출 된 쉘 sh
은 심볼릭 링크에 따라 다릅니다 readlink -e $(which sh)
. sh -c
bash 대신 해당 셸을 사용하여 명령을 구체적으로 실행하려는 경우 사용해야합니다 .
이 구문 ( -c
플래그)을 다른 인터프리터와 함께 사용할 수도 있습니다 . @edwinksl에 의해 지적 된 고전적인 사용법 중 하나는 sudo와 작동하지 않는 리디렉션 문제를 해결하는 것입니다 (여기서는 bash -c
또는 사용할 수 있음 sh -c
)
sudo sh -c 'echo "foo" > /home/bar'
파일 작성합니다 bar
텍스트가 포함 foo
에를 /home/
하면서, sudo echo "foo" > /home/bar
실패 여기에 아주 잘 설명 된대로
명령 문자열 주위에 '작은 따옴표'를 사용하는 것이 중요합니다. 그렇지 않으면 현재 쉘이 호출 한 인터프리터에게 전달되기 전에 확장하려고 시도합니다.
예를 들어 (대시로 다른 결과를 줄 명령을 생각할 때까지 파이썬으로 ...)
$ python3 -c print (35/7)
bash: syntax error near unexpected token `('
$ python3 -c 'print (35/7)'
5.0
-c
인수는 다음과 같습니다
표준 입력 대신 command_string 피연산자에서 명령을 읽습니다. 특수 매개 변수 0은 command_name 피연산자에서 설정되고 위치 매개 변수 ($ 1, $ 2 등)는 나머지 인수 피연산자에서 설정됩니다.
sh
Arugment 의 다른 세부 사항은 다음 을 실행하여 찾을 수 있습니다.
$ man sh
문자열을 인수로 사용하는 예는 다음과 같습니다.
$ sh -c "echo This is a test string"
더 자세한 sh -c
예입니다. Google 드라이브에서 문서를 다운로드하여 바탕 화면에서 편집 할 수 있도록 엽니 다.
$ sh -c "wget 'https://docs.google.com/document/u/0/d/1jcBtdlMx0f4BhCmAmnIViIy4WN4oRevWFRzse-P00j0/export?format=docx' -O test.docx && xdg-open test.docx 2>/dev/null"
sh -c
( 우분투에서) 비 로그인 , 비 대화식 세션을 생성합니다 .sh
dash
그 쉘 세션에서 실행 될 명령 다음, 그것은 0 (인수 (위치 파라미터)로서 취급한다 ARGV0
), 그 명령의 인수 (와 나머지 부 ARGV0
(1)로부터 시작하여, () ARGV1
, ARGV2
...).
이러한 종류의 세션에서 실행되도록 허용 된 일반적인 쉘 기능 (예 : ;
여러 명령을 사용하는 명령 분리,을 사용한 명령 그룹화,을 사용하여 {}
다른 서브 쉘 생성) ()
등을 사용할 수도 있습니다. 이들을 사용하면 앞에서 언급 한 인수 정의 / 예를 약간 변경할 수 있습니다.
그냥 참고로, 특정 수있는 기능 대화 형 전용 (기본적으로) 쉘, 예를 들어 역사 확장, source
의 -ing ~/.bashrc
하고 /etc/bash.bashrc
그대로 등이 세션에서 사용할 수 없습니다 비대화 형 . 다음 -i
옵션 을 사용하여 대화식 세션 동작 (거의)을 시뮬레이션 할 수 있습니다 .
sh -ic ...
마찬가지로 로그인 쉘 전용 (기본적으로)과 같은 기능 ( 예 : source
- ~/.profile
제공 ~/.bash_profile
및 ~/.bash_login
존재하지 않음) /etc/profile
은 쉘이 비 로그인 쉘 이므로 수행되지 않습니다 . 다음 -l
옵션을 사용하여 로그인 쉘 동작을 시뮬레이션 할 수 있습니다 .
sh -lc ...
로그인 및 대화식 세션을 모두 시뮬레이트하려면 다음을 수행하십시오.
sh -lic ...
sh -c
?-c
부분에 언급 된 위치 매개 변수의 할당을 보여 주면 더 좋을 것 입니다man sh
.