에서 가져옴FreeBSD 매뉴얼 페이지sh에서(온라인에서 가장 편리한 방법이므로 중요한 경우 대상 플랫폼은 Debian입니다):
SH(1) FreeBSD General Commands Manual SH(1)
NAME
sh -- command interpreter (shell)
SYNOPSIS
sh [-/+abCEefhIimnPpTuVvx] [-/+o longname] [script [arg ...]]
sh [-/+abCEefhIimnPpTuVvx] [-/+o longname] -c string [name [arg ...]]
sh [-/+abCEefhIimnPpTuVvx] [-/+o longname] -s [arg ...]
...
특히 다음 사용 사례에 관심이 있습니다.
sh [-/+abCEefhIimnPpTuVvx] [-/+o longname] -c string [name [arg ...]]
예:
# Normal:
myscript hello world
myscript hello world >/var/log/myscript.combined 2>&1
# Constrained:
# - Arguments 'hello' and 'world' are suffixed by calling program.
myscript >/var/log/myscript.combined 2>&1 hello world
# Constrained Further:
# - Wrapped in `sh` to catch system messages, like Segmentation Fault
sh -c 'myscript $@' _ >/var/log/myscript.combined 2>&1 hello world
myscript
첫 번째 매개변수가 전달되지 않고 문서에 매개변수가 포함되어 있음 을 확인했는데 name
문서 부분이 표시되지 않습니다. 내 예에서는 _
name 매개변수 대신 광고를 추가했지만 다음과 같습니다.
무엇을 채워야 합니까 name
?
답변1
시트:
sh -c '...' name arg1 arg2 ...
일반적으로 find ... -exec sh -c '...' find-sh {} +
인라인 스크립트에서는 $0
로 설정되고 name
나머지 매개변수는 으로 채워집니다 $@
.
일반적으로 오류 메시지를 표시하는 데 사용되므로 의미 있는 값으로 설정해야 합니다.
sh -c 'echo "${1?}"' foo
foo: 1: foo: 1: parameter not set
name
그러나 인라인 스크립트의 이름을 나타내기 위해 원하는 단어로 설정할 수 있습니다 .
sh -c 'printf "%s\n" "$0"' custom-sh 1 2 3
custom-sh
이 동작은 다음과 같이 정의됩니다.POSIX.
답변2
Linux 매뉴얼 페이지는 매우 상세합니다.
sh -c [-aCefnuvxIimqVEb] [+aCefnuvxIimqVEb] [-o 옵션 이름] [+o 옵션 이름] 명령 문자열 [명령 이름 [매개변수...]]
-씨 표준 입력 대신 command_string 피연산자에서 명령을 읽습니다. 특수 매개변수 0은 command_name 피연산자에서 설정되고 위치 매개변수($1, $2 등)는 나머지 매개변수 피연산자에서 설정됩니다.
명령 이름command_string에서 명령을 실행할 때 특수 매개변수 0에 할당된 문자열입니다. command_name이 지정되지 않은 경우 특수 인수 0은 상위에서 sh로 전달된 첫 번째 인수 값으로 설정되어야 합니다(예: C 프로그램의 경우 argv[0]). 이는 일반적으로 sh를 실행하는 데 사용되는 값입니다. 유틸리티.