Diambil dari halaman manual FreeBSD di sh (karena online paling nyaman, platform target adalah Debian jika penting):
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 ...]
...
Saya sangat tertarik dengan kasus penggunaan:
sh [-/+abCEefhIimnPpTuVvx] [-/+o longname] -c string [name [arg ...]]
Contoh:
# 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
Saya perhatikan bahwa argumen pertama tidak diteruskan ke myscript
, dan dokumentasi menyinggung name
parameter, yang saya tidak melihat bagian dokumen. Dalam contoh saya, saya telah menambahkan iklan _
menggantikan argumen nama, tetapi:
Apa yang harus saya isi untuk name
?
Jawaban yang Diterima:
Bentuknya:
sh -c '...' name arg1 arg2 ...
disebut inline-script, sering terlihat dalam kombinasi dengan find ... -exec sh -c '...' find-sh {} +
. Di dalam skrip sebaris, $0
akan disetel ke name
, dan argumen lainnya diisi ke [email protected]
.
Secara umum, Anda harus mengaturnya menjadi sesuatu yang bermakna, karena akan digunakan misalnya menampilkan pesan kesalahan:
sh -c 'echo "${1?}"' foo
foo: 1: foo: 1: parameter not set
Tetapi Anda dapat mengatur name
untuk kata apa pun yang Anda suka, untuk menunjukkan nama skrip sebaris:
sh -c 'printf "%sn" "$0"' custom-sh 1 2 3
custom-sh
Perilaku ini ditentukan oleh POSIX.