Shell interaktif dengan lingkungan yang identik dengan cron

10

Saya menyadari banyak jebakan di dunia sihir crontab, tetapi kadang-kadang akan banyak membantu pemecahan masalah ketika Anda memiliki beberapa cara cerdas untuk memasukkan shell interaktif (bash) dengan lingkungan identik persis seperti ketika skrip shell dijalankan dari sebuah crontab.

Sekarang saya berpikir sendiri /bin/openvt -c8 -- /bin/bash --noprofile -l, tetapi membutuhkan hak akses root, set terlalu banyak variabel dan su myusernameset sederhana banyak lingkungan ekstra.

Adakah yang tahu cara memulai bash shell interaktif dengan lingkungan identik-ke-cron dan tidak memerlukan hak akses root di Kubuntu?

Bonus ketika bekerja dalam sesi ssh, di GUI dan pada satu atau lebih OS berikut juga: HP-UX, Solaris dan AIX

jippie
sumber

Jawaban:

14

Jalankan crontab -edan tambahkan entri dengan

* * * * * export -p > ~/cron-env

(jika pada Solaris atau sistem yang tidak menggunakan shell POSIX untuk menginterpretasikan baris perintah itu, gunakan /usr/xpg4/bin/sh -c 'export -p > ~/cron-env'atau apa pun jalur ke standar shpada sistem itu).

Tunggu satu menit dan hapus garis itu.

Anda sekarang harus memiliki cron-envfile di direktori home Anda.

Anda kemudian dapat menjalankan:

cd && env -i sh -c '. ./cron-env; exec sh'

Untuk memulai shell dengan lingkungan yang sama dengan tugas cron Anda.

Stéphane Chazelas
sumber
Menarik, akan memeriksa ketika saya kembali sekitar satu jam.
jippie
Cemerlang, bekerja seperti mimpi!
jippie
Jawaban paling bagus. Saya akan memilih lebih dari sekali jika saya bisa.
Sukima
2

Cron bukan shell interaktif, jadi itu masalah pertama Anda. Namun sebagian besar diabaikan.

Yang sebenarnya adalah: variabel lingkungan. Lihat header dari cron mail untuk menemukannya, kemudian atur variabel di shell Anda untuk mencocokkannya dan hapus semua variabel yang tersisa.

Sekarang Anda cukup dekat dengan lingkungan seperti yang dilihat cron.

Dennis Kaarsemaker
sumber
Tidak pernah memperhatikan header surat berisi beberapa lingkungan, secara default Thunderbird menyembunyikan ini dari pengguna. Header sayangnya, tidak mewakili lingkungan yang lengkap.
jippie