Jika Terminal macOS melaporkan “permission denied” saat Anda menjalankan shell script lokal, pertama-tama periksa bahwa Anda berada di folder yang benar dan dapat membaca file tersebut. Kemudian tambahkan izin eksekusi untuk pengguna Anda dengan chmod u+x, jika Anda bermaksud menjalankannya secara langsung. Jika itu tidak mengatasi kesalahan tersebut, periksa folder-folder induknya dan apakah macOS memblokir app yang meluncurkan shell agar tidak mengakses file tersebut. Hindari penggunaan sudo atau perubahan izin yang terlalu luas sebagai solusi pertama.
1. Konfirmasikan jalur script dan folder Anda saat ini
Buka Terminal dan berpindahlah ke folder yang berisi script tersebut. Beri tanda kutip pada jalur jika mengandung spasi:
cd "/Users/yourname/Projects/My Scripts"
ls -l "./build.sh"
Ganti contoh jalur dan nama file dengan milik Anda sendiri. Output ls -l menampilkan izin dan pemilik file tersebut. Jika tertulis bahwa file tidak dapat ditemukan, temukan folder yang benar atau gunakan jalur lengkap. Jalur relatif seperti ./build.sh berarti “build.sh di folder saat ini”; ini tidak mencari di folder lain.
2. Tambahkan izin eksekusi ke script Anda
Jika file tersebut ada dan Anda adalah pemiliknya, tambahkan izin eksekusi hanya untuk akun Anda, lalu jalankan dari foldernya:
chmod u+x "./build.sh"
./build.sh
Panduan shell scripting dari Apple menggunakan chmod u+x sebelum menjalankan script. Huruf u membatasi perubahan hanya untuk pemilik file; +x menambahkan izin untuk mengeksekusi. Ini lebih terarah daripada chmod 777, yang memberikan izin baca, tulis, dan eksekusi kepada semua orang. Apple’s Shell Script Basics
Jika Terminal masih menampilkan “permission denied,” periksa kembali izinnya dengan ls -l. Anda juga dapat memeriksa siapa pemilik file dengan ls -l dan nama akun Anda dengan whoami. Jika akun lain memiliki script tersebut dan Anda tidak memiliki izin untuk mengubahnya, gunakan salinan di folder milik Anda atau mintalah pemilik atau administrator untuk memberikan akses yang sesuai. Jangan mengambil alih kepemilikan file sistem sebagai jalan pintas.
3. Periksa akses folder dan konten script
Eksekusi memerlukan akses di sepanjang jalurnya serta izin pada script itu sendiri. Periksa folder induk script jika Anda tidak dapat masuk ke direktorinya atau menjangkau file tersebut. Jika file berada di volume bersama (shared), eksternal, atau yang dikelola, aturan aksesnya mungkin berbeda; cobalah salin ke folder milik Anda, asalkan menyalinnya diperbolehkan.
Jika perintah Anda justru mengembalikan Permission denied saat script mencoba membuat atau memodifikasi file output, script tersebut mungkin dapat dieksekusi tetapi tidak memiliki akses tulis ke tujuan tersebut. Periksa folder tujuan dan jalur di dalam script. Jangan membuat script dapat ditulis atau dieksekusi oleh semua orang hanya untuk melewati suatu kesalahan.
Untuk script yang berada di dalam Desktop, Documents, atau Downloads, kontrol privasi macOS mungkin juga berpengaruh jika app selain Terminal yang meluncurkannya. Di Pengaturan Sistem (System Settings), buka Privasi & Keamanan > File & Folder (Privacy & Security > Files & Folders) dan tinjau akses yang terdaftar untuk app yang bersangkutan. Apple menjelaskan kontrol ini sebagai akses per-app ke lokasi tertentu. Pesan kesalahan izin dari perintah shell saja bukan merupakan bukti bahwa pengaturan privasi inilah penyebabnya. Apple: Mengontrol akses ke file dan folder di Mac
4. Jika eksekusi langsung gagal, jalankan interpreter secara eksplisit
Sebuah script dapat dibaca oleh akun Anda tetapi tidak memiliki izin eksekusi. Jika ini adalah shell script, Anda dapat meminta interpreternya untuk membaca dan menjalankannya secara langsung:
/bin/sh "./build.sh"
Gunakan ini hanya jika script tersebut memang ditujukan untuk sh. Jika baris pertamanya menyebutkan interpreter lain, seperti Bash, gunakan interpreter tersebut; baris interpreter (baris #!) menentukan bagaimana sebuah script seharusnya dijalankan. Apple merekomendasikan untuk menyertakan baris tersebut demi konsistensi. Apple’s Shell Script Basics
Menjalankan melalui interpreter dapat melewati kebutuhan izin eksekusi pada file script, tetapi ini tidak memberikan izin untuk membaca script atau mengakses file yang digunakannya. Jika pesannya berubah menjadi interpreter yang hilang atau kesalahan sintaksis, atasi masalah spesifik tersebut; ini adalah masalah yang berbeda dari izin eksekusi.
5. Jangan gunakan sudo atau menonaktifkan perlindungan keamanan sebagai jalan pintas
sudo menjalankan perintah dengan hak istimewa yang lebih tinggi; ini tidak memperbaiki file yang hilang, jalur yang salah, atau script yang belum Anda periksa. Gunakan ini hanya jika Anda memahami mengapa tugas tersebut memerlukan akses administrator dan memercayai sumber serta konten script tersebut. Perubahan luas seperti chmod 777 dapat mengekspos file terhadap modifikasi oleh pengguna lain.
Pesan “permission denied” pada shell script juga berbeda dari peringatan Gatekeeper tentang app yang tidak dapat diverifikasi oleh macOS. Langkah-langkah “Tetap Buka” (“Open Anyway”) yang didokumentasikan Apple berlaku untuk peringatan app dan memerlukan keyakinan bahwa app tersebut tepercaya; itu bukan solusi umum untuk izin file shell. Apple: Membuka app dengan aman di Mac Anda
Diagnosis cepat
./script.sh: permission deniedseketika: periksa izin eksekusi file; jika Anda pemiliknya dan memercayainya, cobachmod u+x "./script.sh".- File tidak dapat ditemukan: verifikasi folder Anda saat ini dan nama file yang tepat.
- Script dimulai, lalu sebuah perintah ditolak: periksa file atau folder spesifik yang coba diakses oleh perintah tersebut.
- Peringatan app menyatakan bahwa pengembang tidak dapat diverifikasi: ikuti panduan keamanan app dari Apple hanya setelah memverifikasi sumber app; peringatan tersebut terpisah dari izin eksekusi shell.
Pemeriksaan ini mempersempit masalah pada jalur script, bit eksekusinya, akses ke file yang digunakannya, atau kontrol privasi atau keamanan khusus app. Ubah hanya izin atau pengaturan yang sesuai dengan bukti, lalu jalankan kembali perintah yang sama untuk melihat apakah kesalahannya telah berubah.
Sumber
- Shell Script Basics — Apple Developer
- Mengontrol akses ke file dan folder di Mac — Apple Support
- Membuka app dengan aman di Mac Anda — Apple Support