membuat skrip bash dapat dieksekusi secara terprogram


12

Saya perlu membuat skrip bash untuk membuat dan memasang drive. Jadi, dua perintah sederhana. Keduanya "berfungsi" saat dimasukkan pada baris perintah.

Skrip dibuat dan dieksekusi setiap kali pengguna biasa masuk, jadi saya perlu metode untuk membuat skrip ini dapat dieksekusi pada saat itu. Sejauh ini, saya tidak bisa mendapatkan ini berfungsi. Sebagai contoh, bagian pertama mkdir /vvv/ggggtidak melanjutkan karena skrip tidak dapat dieksekusi (saya menduga).

Semoga ini masuk akal. Apakah ini mungkin? Setiap pemikiran tentang cara membuat karya ini akan dihargai.

Perbarui :

Terima kasih atas tanggapan Anda. Saya mungkin harus menambahkan beberapa informasi tambahan selain saya baru mengenal Linux.

Saya menggunakan aplikasi desktop virtual open source yang disebut Ulteo. Aplikasi ini berjalan di atas Ubuntu dan memiliki sedikit dukungan - itu sebabnya saya ada di sini. Pada dasarnya, saya belajar dengan api.

Jadi, ada aplikasi yang memiliki fungsi manajemen skrip login di mana saya bisa mengikat skrip ke pengguna. Skrip windows sederhana dengan penggunaan internet berfungsi dengan sangat baik. Namun, ketika saya mencoba menerapkan skrip bash Linux tidak ada yang terjadi.

Saya berpikir bahwa karena saya perlu melakukan chmod +xmenentang skrip terlebih dahulu untuk membuat skrip dapat dieksekusi, ini sebabnya gagal. Ngomong-ngomong, Ulteo berlari di penjara chroot. Saya telah membuat skrip, menyimpannya dan tidak dapat menemukan skrip. Saya mencari di dalam dan di luar penjara chroot.

Saya suka pendekatan oleh dan08 untuk memiliki referensi skrip awal skrip lain yang dapat saya temukan dan membuat dieksekusi secara manual. Apakah saya akan mengalami masalah yang sama?

Apakah informasi tambahan ini mengklarifikasi situasinya? Terima kasih sebelumnya.

Foto terlampir.

! [login scipt management console] [1]

! [skrip windows yang berfungsi] [2]

! [skrip linux sederhana yang tidak berfungsi] [3]

Maaf saya belum bisa mengirim gambar


Apakah Anda akan menulis tugas cron untuk menjalankan skrip setiap kali pengguna masuk? Panduan ini juga akan membantu Anda membuatnya .
Sleep Deprived Bulbasaur

1
"Skrip dibuat dan dieksekusi setiap kali pengguna biasa mencatat" mengapa? Saya akan memperbaikinya karena kedengarannya tidak logis bagi saya. Saya akan memberi makan skrip pengguna sebagai parameter dan membiarkan skrip tersentuh setelah dibuat.
Rinzwind

1
Ada campuran tegang yang aneh dalam pertanyaan yang membuat saya bingung tentang apa yang saat ini terjadi dan apa yang ingin Anda lakukan. Akan membantu jika Anda bisa sedikit lebih spesifik tentang situasi saat ini.
Oli

Harap edit pertanyaan Anda dan tunjukkan skripnya kepada kami. Juga tunjukkan kepada kami output dari ls -l scriptname. Anda juga harus mengklarifikasi bagaimana tepatnya skrip dibuat dan mengapa Anda tidak hanya membuatnya sekali dan membiarkannya saja. Akhirnya, pengguna normal Anda seharusnya tidak memiliki akses tulis /vardan karenanya tidak dapat membuat direktori di sana.
terdon

1
Posting tautan gambar dalam komentar. Kami akan mengimpornya melalui (disarankan) suntingan.
muru

Jawaban:


19

Ada dua hal yang perlu Anda lakukan:

  1. Referensi penerjemah skrip di awal skrip:

    #!/bin/bash
  2. Tetapkan izin untuk membuatnya dapat dieksekusi:

    chmod +x myscript.sh

3

Daripada membuat skrip Anda dapat dieksekusi, Anda dapat mengambil pendekatan yang berbeda dan mengubah cara Anda memanggil skrip.

script.sh sudah cukup untuk menjalankan skrip yang dapat dieksekusi.

Namun

Dimungkinkan untuk menjalankan skrip non-exectuable jika Anda menentukan program untuk menjalankannya.

Jadi /bin/bash script.shatau bash script.shatau python script.pysemua akan menjalankan skrip yang tidak dapat dieksekusi.

Jadi saran saya adalah mengedit cara penulisan skrip, dan menentukan biner yang digunakan untuk menjalankannya.


Di pihak saya, saya biasanya membuat mereka excutable, karena jika Anda tidak melakukan itu, Anda tidak dapat meluncurkan kembali file itu sendiri. Sebagai contoh, python os.execv(__file__, sys.argv)tidak akan berfungsi, dan pastinya ada lebih banyak situasi seperti itu. Jika keamanan adalah tujuan, gunakan saja dari root / sudo alih-alih biarkan pengguna menjalankan binari. Juga, jika tujuannya adalah keamanan, Anda tidak ingin mereka dapat menjalankan skrip, karena Anda tetap dapat merusak sistem ... dapat dieksekusi atau tidak. Jadi saya tidak melihat mengapa penting untuk menghindari membuatnya menjadi executable.
m3nda

0

Buat program dalam C, C ++ atau Python dll dan gunakan perintah sistem untuk mengeksekusi skrip bash.

Misalnya program C akan terlihat seperti:

#include "stdio.h"
int main(int argc, char const *argv[])
{
    system('chmod +x path/yourbashscript.sh');
    system('path/yourbashscript.sh');
    return 0;
}

Untuk menjalankan program saat startup tambahkan ke daftar program startup. Buka Aplikasi Startup dari dasbor Anda dan tambahkan executable yang dikompilasi ke daftar dengan mengklik tombol add.


2
-1: Ini bukan jawaban. Mengapa python lebih baik daripada skrip shell? Apalagi C! Bagaimanapun, Anda tidak benar-benar menunjukkan seperti apa program ini dan Anda tidak menjelaskan cara menambahkan program ke daftar program startup.
terdon

Jawaban untuk pertanyaan pertama Anda dapat diberikan dengan menjelaskan bagaimana bahasa pemrograman berbeda dari bahasa scripting karena untuk sisanya saya telah mengedit jawaban saya
akxer

Terima kasih atas hasil editnya, -1 dihapus. Namun, menggunakan program C untuk meluncurkan skrip shell di Linux sama sekali tidak perlu dan menambah overhead yang tidak perlu. Mengapa tidak menambahkan skrip itu sendiri ke aplikasi startup? Atau, jika Anda benar-benar ingin menggunakan C mengapa tidak menerapkannya secara langsung? Membuat wrapper dalam C yang memanggil skrip shell di Linux tidak masuk akal sama sekali kecuali Anda membutuhkan skrip untuk dijalankan dengan set bit SUID. Bahkan dalam kasus itu, biasanya ada solusi yang lebih sederhana.
terdon

1
-1: Ini masih akan gagal jika skrip tidak memiliki izin. Anda harus menelepon bash path/yourbashscript.sh.
muru

1
Yang menimbulkan pertanyaan, mengapa tidak menjalankan bash path/yourbashscript.shlangsung alih-alih menyusun dan menjalankan program C ini?
muru

0

Anda dapat membuat skrip bash Anda dapat dieksekusi dengan menjalankan yang berikut di baris perintah.

cd ~/path/to/file
chmod +x nameoffile.sh

Kemudian, membuatnya dijalankan pada saat start up dapat dilakukan dengan menambahkannya ke daftar program startup Anda seperti kata @akabhirav.


Sepertinya saya pertanyaan (agak) menunjukkan bahwa dia akrab dengan cara chmod. Tapi dia meminta metode untuk membuatnya dapat dieksekusi dari dalam skrip itu sendiri (jadi dia tidak harus melakukan ini secara manual). Meskipun saya masih mempertanyakan metodenya: membuat ulang skrip dengan cepat bukan cara untuk melakukan ini.
Rinzwind

0

SHC adalah kompiler skrip shell generik. Dibutuhkan skrip, yang ditentukan pada baris perintah dan menghasilkan kode sumber C. Kode sumber yang dihasilkan kemudian dikompilasi dan dihubungkan untuk menghasilkan biner yang dilucuti.

Biner yang dikompilasi masih akan bergantung pada shell yang ditentukan pada baris pertama kode shell (shebang: #!/bin/shatau semacamnya), sehingga SHC tidak membuat binari yang sepenuhnya independen.

SHC sendiri bukan kompiler seperti cc. Melainkan mengkodekan dan mengenkripsi skrip shell dan menghasilkan kode sumber C dengan kemampuan kedaluwarsa yang ditambahkan. Ini kemudian menggunakan kompiler sistem untuk mengkompilasi biner dilucuti yang berperilaku persis seperti skrip aslinya. Setelah dieksekusi, biner yang dikompilasi akan mendekripsi dan mengeksekusi kode dengan opsi shell -c.


Apa gunanya ini jika executable masih membutuhkan lingkungan shell asli? Bagaimana ini lebih baik daripada hanya menambahkan a #!dan chmod +x?
xiota
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.