Lebih
Bagaimana memanggil shell script dari yang lain shell script?
Saya memiliki dua shell script, a.sh
dan b.sh
.
Bagaimana saya bisa memanggil b.sh
dari dalam shell script a.sh
?
664
17
Ada beberapa cara yang berbeda yang dapat anda lakukan ini:
Membuat script executable, tambahkan
#!/bin/bash
garis di bagian atas, dan path dimana file tersebut ke $PATH variabel lingkungan. Kemudian anda dapat menyebutnya sebagai normal perintah;Atau sebut saja dengan
sumber
perintah (alias.
) seperti ini:sumber /path/to/script
;Atau menggunakan
bash
perintah untuk mengeksekusi itu:/bin/bash /path/to/script
;Yang pertama dan ketiga metode execute script sebagai proses lain, sehingga variabel dan fungsi-fungsi dalam script lain tidak akan dapat diakses. Kedua metode mengeksekusi script di script pertama's proses, dan menarik dalam variabel dan fungsi dari script lain sehingga mereka dapat digunakan dari pemanggilan script.
Dalam metode kedua, jika anda menggunakan
keluar
dalam kedua naskah itu, akan keluar pertama script juga. Yang tidak akan terjadi di pertama dan ketiga metode.Check this out.
Ada beberapa cara yang dapat anda lakukan ini. Terminal untuk mengeksekusi script:
Semua ini adalah benar untuk jalan dengan spasi!!!
Jawaban yang saya cari:
Seperti disebutkan,
exec
menggantikan shell tanpa menciptakan sebuah proses baru. Namun, kita dapat memasukkannya ke dalam subkulit, yang dilakukan dengan menggunakan parantheses.EDIT: Benar-benar
( "path/to/script" )
adalah cukup.Tergantung pada. Sebentar... Jika anda ingin memuat variabel pada saat ini konsol dan mengeksekusi anda dapat menggunakan
sumber myshellfile.sh
pada kode anda. Contoh:Jika anda hanya ingin menjalankan file dan satu-satunya hal yang menarik bagi anda adalah hasilnya, dapat anda lakukan:
Saya harap membantu anda. Terima kasih.
Anda dapat menggunakan
/bin/sh
untuk memanggil atau menjalankan script yang lain (via anda yang sebenarnya script):Output akan sama:
Tambahkan saja di garis apa pun yang anda akan telah mengetik di terminal untuk mengeksekusi script!
misalnya:
jika skrip dijalankan tidak dalam direktori yang sama, hanya menggunakan path lengkap dari script.
misalnya:`/home/user/script-directory/./myscript.sh &
Pertama, anda harus menyertakan file yang anda hubungi:
kemudian anda memanggil fungsi seperti ini:
Sumber yang sederhana akan membantu anda. Untuk Ex.
Atas jawabannya menyarankan menambahkan
#!/bin/bash
baris ke baris pertama dari sub-script yang dipanggil. Tetapi bahkan jika anda menambahkan peristiwa, itu jauh lebih cepat* untuk menjalankan script di sub-shell dan menangkap output:$(sumber SCRIPT_NAME)
Ini bekerja ketika anda ingin tetap menjalankan interpreter (misalnya dari bash lain bash script) dan memastikan bahwa peristiwa garis sub-script tidak dieksekusi.
Misalnya:
Output:
* misalnya ketika virus atau alat-alat keamanan yang berjalan pada perangkat mungkin memerlukan tambahan 100ms untuk menjalankan proses baru.
Asumsikan file baru "/home/satya/aplikasi/app_specific_env" dan isi file sebagai berikut
Tambahkan file ini referensi ke ~/.file bashrc
Ketika anda me-restart mesin atau login kembali, mencoba
echo $FAV_NUMBER
di terminal. Itu akan output nilai.Hanya dalam kasus jika anda ingin melihat efek segera,
source ~/.bashrc
pada command line.Itu adalah satu-satunya hal yang saya butuhkan. Setelah script yang akan dieksekusi dilakukan eksekusi seperti ini, anda (setidaknya dalam kasus saya) don't perlu tambahan lain operasi seperti
sh
, atau./
saat anda memanggil script.Terima kasih untuk komentar dari @Nathan Lilienthal
Gunakan backticks.
Kemudian mengambil output dari produsen script sebagai argumen pada konsumen script.
Ada beberapa masalah untuk fungsi impor dari file lain. Pertama: Anda perlu't untuk melakukan hal ini file yang dapat dieksekusi. Lebih baik untuk tidak melakukannya! hanya menambahkan
untuk mengimpor semua fungsi. Dan semua dari mereka akan jika mereka didefinisikan dalam file anda. Detik: Anda dapat mendefinisikan fungsi dengan nama yang sama. Itu akan ditimpa. It's buruk. Anda dapat menyatakan seperti itu
dan hanya setelah itu melakukan impor. Jadi anda dapat menghubungi tua fungsi dengan nama baru. Ketiga: Anda dapat mengimpor daftar lengkap dari fungsi-fungsi yang didefinisikan dalam file. Jika tidak diperlukan, anda dapat menonaktifkan mereka. Tapi jika anda menulis ulang fungsi unset mereka akan hilang. Tetapi jika anda mengatur referensi untuk itu seperti yang dijelaskan di atas, anda dapat mengembalikan setelah diset dengan nama yang sama. Akhirnya kesamaan prosedur impor berbahaya dan tidak begitu sederhana. Hati-hati! Anda dapat menulis script untuk melakukan hal ini lebih mudah dan aman. Jika anda hanya menggunakan bagian dari fungsi(tidak semua) yang lebih baik membagi mereka dalam file yang berbeda. Sayangnya teknik ini tidak dilakukan dengan baik di bash. Di python misalnya, dan beberapa bahasa script itu's mudah dan aman. Mungkin untuk membuat sebagian impor hanya fungsi-fungsi yang diperlukan dengan nama sendiri. Kita semua ingin bahwa dalam berikutnya bush versi yang akan melakukan fungsi yang sama. Tapi sekarang Kita harus menulis banyak tambahan cod untuk melakukan apa yang anda inginkan.
Jika anda memiliki file lain di direktori yang sama, anda dapat melakukan:
bash another_script.sh
atau
sumber another_script.sh
atau
. another_script.sh
Ketika anda menggunakan
bash
bukan darisumber
, script tidak bisa mengubah lingkungan dari orang tua script. The.
perintah standar POSIX sementarasumber
perintah lebih mudah dibaca bash sinonim untuk.
(Saya lebih sukasumber
atas.
). Jika naskah anda berada di tempat lain hanya memberikan jalan untuk itu naskah ini. Kedua relatif serta penuh jalan harus dunia.