GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mendapatkan status keluar dari perintah Shell yang digunakan di GNU Makefile?

Di makefile-:

mycommand || (echo "mycommand failed $$?"; exit 1)

Setiap baris dalam tindakan makefile memanggil shell baru - kesalahan harus diperiksa di baris tindakan di mana perintah gagal.

Jika mycommand gagal, cabang logika ke pernyataan gema lalu keluar.


Jika semua yang Anda inginkan adalah untuk make untuk dibatalkan jika alat keluar dengan status bukan nol, make sudah akan melakukannya secara default.

Contoh Makefile :

a: b
    @echo making [email protected]
b:
    @echo making [email protected]
    @false
    @echo already failed

.Inilah yang terjadi dengan make saya :

$ make
making b
make: *** [Makefile:6: b] Error 1

Pastikan target yang dibuat sebagian atau seluruhnya dihapus jika Anda gagal. Misalnya, ini

a: b
    @gena $+ > [email protected]
b:
    @genb > [email protected]

salah:jika pada percobaan pertama, genb gagal, mungkin akan meninggalkan b yang salah , yang, pada percobaan kedua, make akan menganggap benar. Jadi, Anda perlu melakukan sesuatu seperti

a: b
    @gena $+ > [email protected] || { rm [email protected]; exit 1; }
b:
    @genb > [email protected]

Berikut beberapa pendekatan lainnya:

shell &.SHELLSTATUS

some_recipe:
    @echo $(shell echo 'doing stuff'; exit 123)
    @echo 'command exited with $(.SHELLSTATUS)'
    @exit $(.SHELLSTATUS)

Keluaran:

$ make some_recipe

doing stuff
command exited with 123      
make: *** [Makefile:4: some_recipe] Error 123

Itu memang memiliki peringatan bahwa shell output perintah tidak dialirkan, jadi Anda hanya berakhir dengan dump ke stdout setelah selesai.

$?

some_recipe:
    @echo 'doing stuff'; sh -c 'exit 123';\
    EXIT_CODE=$$?;\
    echo "command exited with $$EXIT_CODE";\
    exit $$EXIT_CODE

Atau, sedikit lebih mudah dibaca:

.ONESHELL:

some_recipe:
    @echo 'doing stuff'; sh -c 'exit 123'
    @EXIT_CODE=$$?
    @echo "command exited with $$EXIT_CODE"
    @exit $$EXIT_CODE

Keluaran:

$ make some_recipe

doing stuff                  
command exited with 123      
make: *** [Makefile:2: some_recipe] Error 123

Ini pada dasarnya adalah satu rangkaian perintah, dieksekusi di shell yang sama.


Linux
  1. Cara menghapus database mysql melalui perintah shell

  2. Cara mendapatkan status keluar satu lingkaran di bash

  3. Bagaimana cara mendapatkan kode keluar dari proses pemijahan di skrip Shell yang diharapkan?

  1. Tutorial Status Keluar Bash Shell dengan Contoh Praktis

  2. Bagaimana cara menggunakan perintah su melalui adb shell?

  3. Bagaimana cara mendapatkan PID induk dari proses yang diberikan di GNU/Linux dari baris perintah?

  1. Cara menggunakan alias shell di Linux

  2. Bagaimana cara keluar jika perintah gagal?

  3. Dapatkan baris pertama dari keluaran perintah shell