"sh -c"의 "name" 매개변수는 어떻게 사용됩니까?

"sh -c"의 "name" 매개변수는 어떻게 사용됩니까?

에서 가져옴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를 실행하는 데 사용되는 값입니다. 유틸리티.

관련 정보