Saya bingung tentang mengeksekusi izin file yang tidak berperilaku seperti yang saya harapkan. Mungkin karena harapan saya salah. Bagaimanapun:
Saya memiliki file skrip, karena kesederhanaannya hanya disebut s
, terletak di ~/bin
. Demi contoh ini, file hanya berisi baris berikut:
#!/bin/zsh
echo "Test";
Sangat sederhana.
Saya menavigasi ke ~/bin
direktori, dan chmod
izin file s
untuk 400
- yaitu, hanya-baca untuk saya saja. Tidak ada izin eksekusi. Jadi saya mencoba menjalankan skrip dengan memasukkan jalannya, memberikan ini:
% ./s
zsh: permission denied: ./s
Sejauh ini baik. File tidak dapat dieksekusi karena izin yang salah. Izin menabrak hingga 500
(mengeksekusi izin diberikan) juga berfungsi dengan baik - dengan izin ini, file mengeksekusi baik:
% ./s
Test
Ini semua seperti yang diharapkan. Tapi kemudian saya chmod
izin kembali ke 400
(mengeksekusi izin lagi), mencoba source
file, dan ini terjadi
% source s
Test
Meskipun izin 400
, skrip dijalankan.
Jadi inilah pertanyaan saya: mengapa ./s
gagal (seperti seharusnya) tetapi source s
dijalankan secara normal? Tidakkah ini mengalahkan seluruh tujuan dari izin eksekusi?
Atas 400
izin, sh s
dan zsh s
juga bekerja.
Saya yakin saya melakukan atau memahami sesuatu yang sangat salah di suatu tempat. Dapatkah seseorang titik di mana saya, dan menjelaskan perbedaan antara ./s
, source s
, sh s
dan zsh s
?
cat s
cukup cetak isi file.cat s | zsh
meneruskannya kezsh
dan dicetakTest
.