Dalam Bash
shell, saya bisa mendapatkan status perintah keluar melalui $?
variabel:
# ps -ef | grep "haha"
root 15439 15345 0 23:02 pts/0 00:00:00 grep --color=auto haha
# echo $?
0
Apakah hanya tersedia di Bash shell? Atau bisakah saya juga menggunakannya di kulit lain?
bash
shell
portability
Nan Xiao
sumber
sumber
Jawaban:
Kode
$?
keluar adalah umum untuk setiap shell yang mengikuti POSIX, dan dijelaskan dalam 2.5.2 Parameter Khusus :sumber
$r
saya yakini). Jadi itulah sh dari hampir semua sistem mirip Unix sejak Unix V7 di akhir 70-an, Sebagian besar kerang lainnya (csh, tcsh, fish, rc) memilikinya$status
.Seperti yang dikatakan Thomas Dickey, semua shell POSIX (mis., Hampir semuanya) akan memilikinya
$?
.Pertanyaan ini cukup menarik bagi saya, jadi saya mengujinya pada shell apa pun yang bisa saya dapatkan:
mksh
zsh
/bin/sh
pada Samsung Galaxy S5 saya/bin/sh
di router sayatcsh
ksh
dash
/bin/sh
pada Sistem V UNIX virtual saya dari tahun 1989 atau lebihcmd.exe
danpowershell.exe
di komputer Windows 10 sayadan
$?
bekerja di semua ini tetapifish
dancmd.exe
.Ditemukan dua hal menarik:
1.
$?
berfungsi di Windows PowerShell!Ya, to the point. Alih-alih mengembalikan 0 atau angka yang lebih tinggi, itu hanya
True
danFalse
.2.
$?
tidak bekerja di shellfish
.Namun, saat Anda mengetikkan
$?
ikan, Anda mendapatkan pesan ini:Saya belum sering menggunakannya tetapi saya tidak terkejut,
fish
sepertinya memiliki bahasa shell yang menarik, sangat berbeda daribash
atau apa pun.sumber
$status
IMO yang jauh lebih mudah / terbaca. Hanya cangkang mirip Bourne (di antara cangkang Unix) yang menggunakan$?
AFAIK.$?
ketika "sh ## terjadi?" dan setelah itu, saya tidak pernah lupa arti dari variabel khusus ini :)