GNU/Linux >> Belajar Linux >  >> Linux

Untuk Apa Argumen `name` Untuk `sh -c`?

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.


Linux
  1. Apa yang Mendefinisikan Ukuran Maksimum Untuk Argumen Perintah Tunggal?

  2. Perlu Untuk `builtin` Builtin?

  3. Nama Rilis Fedora 11 – Pilih Ini

  1. Kali di Subsistem Windows untuk Linux

  2. Kali Linux untuk Gemini PDA

  3. Apa cara terbaik untuk mendistribusikan aplikasi biner untuk Linux?

  1. 8 tips untuk baris perintah Linux

  2. Apa aturan untuk pengidentifikasi yang valid (mis. Fungsi, vars, dll) di Bash?

  3. MegaCli:Dapatkan nama perangkat /dev/sd* untuk drive logis