/bin/shmungkin ada bashdi sistem Anda, tetapi ketika dipanggil sebagai sh, bashakan berjalan dalam mode POSIX (seolah-olah POSIXLY_CORRECTdidefinisikan, atau dimulai dengan --posix).
Dalam mode ini, proses substitusi tidak ada.
Solusi:
all:
command1 >file1
command2 >file2
diff file1 file2
rm -f file1 file2
Alternatif:
all:
bash -c "diff <(command1) <(command2)"
Atau cukup definisikan variabel Makefile SHELLsebagai /bin/bash:
SHELL=/bin/bash
Jika Anda ingin mudah dibawa, lanjutkan dengan solusi pertama. Jika Anda baik-baik saja dengan ketergantungan bash, pilih yang kedua. Jika Anda juga tidak perlu peduli dengan makeimplementasi non-GNU , gunakan yang ketiga.
Mengenai pengaturan SHELL: Standar POSIX mengatakan bahwa executable di Makefiles harus dipanggil dengan fungsi system()C library oleh make. Fungsi ini tidak dijamin untuk menggunakan SHELLvariabel lingkungan (pada kenyataannya, hal itu tidak disarankan oleh standar). Standar ini juga mengatakan bahwa pengaturan variabel Makefile SHELLseharusnya tidak mempengaruhi variabel lingkungan SHELL . Namun, dalam sebagian besar implementasi makeyang saya ketahui, variabel Makefile SHELLakan digunakan untuk menjalankan perintah.
Saran dalam Dasar Pemikiran untuk makeutilitas adalah menggunakan bash -c:
Fitur historis MAKESHELL, dan fitur terkait yang disediakan oleh makeimplementasi lain , dihilangkan. Dalam beberapa implementasi itu digunakan untuk membiarkan pengguna menimpa shell untuk digunakan untuk menjalankan makeperintah. Ini membingungkan; untuk portable make, shell harus dipilih oleh makefile writer. Lebih jauh, seorang makefile writer tidak dapat membutuhkan shell pengganti untuk digunakan dan masih mempertimbangkan makefile portable. Meskipun dimungkinkan untuk membakukan suatu mekanisme untuk menentukan shell alternatif, implementasi yang ada tidak menyetujui mekanisme seperti itu, dan makefile penulis sudah dapat meminta shell alternatif dengan menentukan nama shell dalam aturan untuk target; sebagai contoh:
python -c "foo"
bashMakefile atau solusi lain untuk masalah diff tanpa menggunakan file sementara?