Itu adalah fitur yang terdokumentasi.
Jika Anda menjalankan bash melalui symlink bernama sh
, bash akan dimulai sh
mode kompatibilitas.
Dari man bash
:
Jika bash dipanggil dengan nama sh, ia mencoba untuk meniru
perilaku startup versi historis sh semirip mungkin,
sementara menyesuaikan dengan standar POSIX juga. Saat dipanggil sebagai
shell login interaktif, atau shell non-interaktif dengan --login
opsi, pertama mencoba untuk membaca dan menjalankan perintah dari
/ etc / profile dan ~ / .profile, dalam urutan itu. Opsi --noprofile
dapat digunakan untuk menghambat perilaku ini. Ketika dipanggil sebagai interaktif
shell dengan nama sh, bash mencari variabel ENV, perluas
nilai jika didefinisikan, dan menggunakan nilai yang diperluas sebagai nama
file untuk dibaca dan dieksekusi. Karena shell dipanggil sebagai sh tidak
mencoba membaca dan menjalankan perintah dari file startup lainnya, the
Opsi --rcfile tidak berpengaruh. Shell non-interaktif yang dipanggil dengan nama sh tidak berusaha membaca file startup lainnya. Kapan
dipanggil sebagai sh, bash memasuki mode posix setelah file startup
Baca baca.
Bagaimana suatu program tahu nama apa yang digunakan untuk memulainya?
Jika ini adalah program c, ia dapat memeriksa argv[0]
. Jika ini adalah skrip shell atau perl, ia dapat memeriksa $0
.
Sebagai contoh, mari kita pertimbangkan skrip shell sederhana ini:
$ cat utc
#!/bin/sh
case "${0##*/}" in
utc) date -u ;;
et) TZ=US/Eastern date ;;
esac
$0
adalah nama yang dipanggil oleh skrip. ${0##*/}
adalah nama yang disebut skrip dengan nama direktori yang dihapus.
Mari kita buat symlink ini:
ln -s utc et
Begitu, utc
dan et
keduanya menjalankan executable yang sama tetapi mereka memberikan hasil yang berbeda. Saat dijalankan sebagai utc
, ini menghasilkan waktu universal. Saat dijalankan sebagai et
, adalah output waktu AS Timur. Sebagai contoh:
$ utc
Wed Jul 20 18:14:18 UTC 2016
$ et
Wed Jul 20 14:14:20 EDT 2016