「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

おすすめ記事