Saya punya Makefile yang menjalankan alat yang membutuhkan waktu agak lama; itu memungkinkan saya untuk mengganti perintah yang digunakan:
make TOOL=alternative-tool
Saya ingin melewati langkah itu di Makefile, jadi saya mencari perintah yang keluar dengan status 0, dan yang memiliki efek samping yang dapat diabaikan.
Jelas, saya hanya bisa menggunakan true
, tapi itu agak membingungkan:
make TOOL=true
Bunyinya seolah-olah saya ingin menjalankan alat, tetapi saya tidak melakukannya.
Apakah ada executable yang diinstal default yang tidak /bin/true
keluar dengan status 0, dan yang memiliki nama yang mudah diingat dan mudah diketik?
command-line
Roger Lipscombe
sumber
sumber
TOOL=true
akan berada di baris perintah saat menjalankan make, mungkin didokumentasikan dalam README di dekatnya. Baris aktual yang memanggil alat ada di dalam file 7000-line (pihak ketiga).Jawaban:
Meskipun Anda telah meminta sesuatu yang "tidak
/bin/true
", menggantitrue
dengan nama lengkap/bin/true
untuk menunjukkan bahwa itu adalahtrue
program dan bukan arti lain dari "benar" mungkin merupakan solusi terbaik.Kekhawatiran Anda adalah bahwa
true
dalamtampaknya menjadi sesuatu selain nama perintah. Tetapi jika Anda menulis
maka itu jelas perintah. Seseorang mungkin salah membaca
TOOL=true
berarti bahwa beberapa alat lain di suatu tempat dimaksudkan, tetapi tidak adaTOOL=/bin/true
kemungkinan salah membaca seperti itu.Saya tidak yakin kapan
:
, yang merupakan shell builtin tetapi bukan perintah eksternal, akan bekerja. Henning Makholm telah melaporkan bahwa tampaknya berhasil . Tetapi saya pikir itu tidak bekerja dalam semua situasi, dan Anda menemukan bahwa itu tidak bekerja untuk Anda .Adapun alias shell, Anda tidak bisa menggunakannya karena ekspansi alias tidak dilakukan dalam argumen yang Anda berikan ke perintah, juga makefiles tidak menggunakan alias shell yang telah ditentukan sebelumnya. Bahkan jika
make
menjalankan perintah Anda di shell baru, shell itu tidak akan memiliki alias (dan tidak akan menggunakannya bahkan jika itu memilikinya, karena itu akan menjadi shell noninteraktif, di mana ekspansi alias tidak diaktifkan secara otomatis).sumber
:
tampaknya berfungsi dengan baik untuk saya.make
selalu memunculkan shell untuk menjalankan setiap perintah setelah itu dilakukan pergantian sendiri.:
, tetapi itu harus menjadi jawaban (terutama jika benar) dan komentar itu tidak menjelaskan mengapa orang harus berharap itu bekerja. Dalam sebuah direktori denganhello.c
dan tidak ada Makefile, di manamake hello
mengkompilasihello.c
untukhello
, saya menemukanmake CC=: hello
berperilaku sesuai dengan apa yang Anda katakan.:
tidak berfungsi. Menjadi eksplisit tentang/bin/true
mungkin adalah cara terbaik untuk melakukannya.Sementara saya setuju bahwa menggunakan path lengkap untuk
true
menjadi solusi terbaik, saya ingin mencatat apa yang mungkin merupakan cara yang paling umum untuk menghindari eksekusi perintah nyata: menempelecho
di depannya. Begitu:sumber
TOOL
seharusnya dilakukan. Tanpa-s
atau setara,make
memancarkan informasi yang berlebihan, karena keduanyamake
danecho
perintah dijalankan secaramake
terpisah memancarkan output. Sebagai contoh, ketika saya menjalankanmake CC=echo hello
direktori yang memilikihello.c
dan tanpa makefile, saya mendapatkanecho hello.c -o hello
sebagai baris pertama dari output danhello.c -o hello
sebagai yang kedua. Tetapi beberapa build menggunakan (atau pengguna dapat menambahkan)-s
, dan kemudian sangat membantu.make -s CC=echo hello
memberi adilhello.c -o hello
.Anda selalu dapat membuat perintah sendiri yang tidak menghasilkan apa-apa selain mengembalikan status keluar nol. Beberapa opsi:
tautan simbolik yang dinamai dengan tepat ke
/bin/true
skrip shell kosong
program C yang hampir kosong:
sumber
Buat tautan simbolis di direktori kerja ke / bin / true beri nama seperti
skip
. Jadi...Maka garis make dapat ...
sumber
Berikut cara untuk melakukannya dengan karakter yang sedikit lebih banyak:
Setelah Anda melakukannya sekali Anda bisa menjalankannya kembali hanya dengan menggunakan namanya
T
.sumber