Saya memiliki skrip yang berserakan di sistem file saya (efek samping dari proses build) yang menetapkan beberapa variabel lingkungan global (LD_LIBRARY_PATH, PATH, ROOTDIR, dll.) Yang perlu ada di shell saya untuk operasi yang tepat. Tentu saja, itu berarti saya perlu source script.sh
atau . script.sh
untuk membuatnya bekerja, dan tidak ./script.sh
(yang akan menelurkan shell baru dan tidak mengatur variabel di shell saya saat ini).
Adakah yang bisa saya tambahkan ke skrip untuk mencegah (atau memperingatkan) seseorang yang sedang menjalankan ./script.sh
?
Pilihan lain mungkin untuk menghapus izin eksekusi. Dalam hal ini tidak dapat dieksekusi tetapi masih dapat bersumber.
sumber
bash script
terlepas dari tanda eksekusi pada skrip. Juga di bawah Cygwin (apakah ini diperhitungkan?) Anda tidak dapat menghapus flag yang dijalankan.Selain memeriksa $ 0 ( jawaban Mikel ) mungkin berguna untuk mengubah ekstensi dari .sh ke .src, misalnya. Ini akan membantu untuk memahami siapa pun yang tidak boleh menjalankan skrip ini.
sumber
Buat juru bahasa khusus
source_reminder
:Jangan lupa untuk membuatnya dieksekusi. Kemudian gunakan saja dalam skrip Anda:
Sekarang jika Anda menjalankan skrip tanpa sumber, pengingat akan melakukan tugasnya.
sumber
#!/bin/echo do not execute
atau#!/bin/false
atau#!/usr/bin/awk BEGIN { print "you must source " ARGV[1]; exit(1) }
. Namun ini tidak menangkap kasus di mana skrip dieksekusi dengan sesuatu sepertish script
(karena ini mengabaikan Shebang).