shのFreeBSDのマニュアルページから引用(オンラインで最も便利なため、重要な場合はターゲットプラットフォームは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 [email protected]' _ >/var/log/myscript.combined 2>&1 hello world
最初の引数がmyscript
に渡されていないことに気づきました 、およびドキュメントはname
をほのめかしています パラメータ、ドキュメントセクションが表示されませんでした。私の例では、広告_
を追加しました name引数の代わりに、ただし:
name
に何を入力すればよいですか ?
承認された回答:
フォーム:
sh -c '...' name arg1 arg2 ...
インラインスクリプトと呼ばれ、find ... -exec sh -c '...' find-sh {} +
と組み合わせてよく見られます。 。インラインスクリプト内、$0
name
に設定されます 、残りの引数は[email protected]
に入力されました 。
一般に、エラーメッセージを表示する場合などに使用されるため、意味のあるものに設定する必要があります。
sh -c 'echo "${1?}"' foo
foo: 1: foo: 1: parameter not set
ただし、name
を設定することはできます インラインスクリプトの名前を示すために、好きな単語に:
sh -c 'printf "%sn" "$0"' custom-sh 1 2 3
custom-sh
この動作はPOSIXによって定義されています。