Mengapa `at` memperingatkan saya bahwa perintah akan dieksekusi menggunakan / bin / sh? Bagaimana jika saya ingin shell yang berbeda?

12

Saya mencoba menggunakan atdari dalam skrip saya dan mencetak:

peringatan: perintah akan dieksekusi menggunakan / bin / sh

Bagaimana saya menggunakan shell yang berbeda jika saya mau?

Cratylus
sumber

Jawaban:

14

Di Linux, atselalu memperingatkan Anda bahwa ia akan menjalankan perintah yang ditentukan dengan /bin/sh, daripada shell favorit Anda. Anda tidak dapat menekan pesan ini, ini tersandi dalam kode sumber.

Perintah yang Anda lewati ditafsirkan oleh /bin/sh. Perintah ini bisa menjadi jalan menuju skrip jika Anda suka; kemudian /bin/shakan menjalankan program skrip, menyebabkan penerjemah skrip diluncurkan dan menafsirkan skrip tersebut. Bahasa skrip benar-benar independen dari program yang memulainya. Jadi jika misalnya Anda ingin menjalankan skrip bash (yaitu skrip yang dimulai dengan #!/bin/bash), cukup lewati path ke skrip tersebut atdan abaikan pesan yang tidak relevan.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
4

Anda dapat menjalankannya dari shell yang berbeda dengan mengubah script shebang . Beberapa garis shebang yang khas:

#!/bin/sh — Execute the file using sh, the Bourne shell, or a compatible shell
#!/bin/csh -f — Execute the file using csh, the C shell,
#!/usr/bin/perl -T — Execute using Perl with the option for taint checks
#!/usr/bin/php — Execute the file using the PHP command line interpreter
#!/usr/bin/python -O — Execute using Python with optimizations to code
#!/usr/bin/ruby — Execute using Ruby

Untuk menjalankan skrip pada waktu tertentu, saya sarankan Anda menambahkan cronjob

Contoh:

Baris berikut membuat program pengguna test.pl - seolah-olah skrip Perl - dijalankan setiap dua jam, pada tengah malam, 02:00, 04:00, 06:00, 8:00, dan seterusnya:

0 * / 2 * * * /home/username/test.pl

vfbsilva
sumber
#!/usr/bin/perlsudah menjadi shebang dalam skrip saya tapi saya mendapat peringatan
Cratylus
@Cratylus lihat di sini untuk penjelasan.
vfbsilva
+1 shbang dan menyebutkan ruby ​​dan perl. Juga, pertimbangkan untuk menggunakan "#! / Bin / env ruby".
ChuckCottrill
punyaku masih mengeluh setelah #!/bin/sh....?
gloomy.penguin