Menjalankan skrip bash dari skrip bash di folder lain

2

Saya punya beberapa folder (satu untuk setiap bulan), masing-masing dengan skrip bash savetodatabase.sh. Saya ingin menjalankan semuanya satu sama lain, jadi saya membuat skrip bernama saveall.sh yang memiliki kode berikut:

#!/bin/bash
sh 2014/07-Jul/savetodatabase.sh
sh 2014/08-Aug/savetodatabase.sh
sh 2014/09-Sep/savetodatabase.sh
sh 2014/10-Oct/savetodatabase.sh
sh 2014/11-Nov/savetodatabase.sh
sh 2014/12-Dec/savetodatabase.sh

Namun, ini menjalankan skrip di folder saveall, bukan folder tempat skrip berbeda berada. Bagaimana cara memperbaiki ini, sehingga skrip tunggal dapat menjalankan semua skrip "lokal"?

bjornasm
sumber

Jawaban:

2

Saat ini Anda sebenarnya menjalankan skrip dari direktori tempat Anda menyimpan. Jika Anda ingin menjalankan masing-masing skrip di folder mereka (saya berasumsi Anda mungkin memiliki beberapa output yang masuk ke pwd?) Maka cara termudah kemungkinan akan adalah untuk cd ke masing-masing folder dan kemudian menjalankan skrip sh individu. Jadi sesuatu seperti:

#!/bin/bash
cd base_dir/2014/07-Jul
sh savetodatabase.sh
cd base_dir/2014/08-Aug
sh savetodatabase.sh

dll.

Referensi ke "base_dir" adalah untuk menunjukkan menggunakan path lengkap ke direktori Anda.

Atau, dan sepenuhnya bergantung pada perbedaan dan kompleksitas skrip savetodatabase Anda, Anda mungkin dapat menggabungkan proses dalam skrip tersebut menjadi skrip tunggal dengan beberapa logika bawaan yang memungkinkan untuk variasi berdasarkan tahun / bulan. Jika ini hanya beberapa perubahan variabel, Anda dapat memiliki file 'config' txt yang dibaca dan dilewati skrip (atau metode lain semacam itu untuk menjalankan variasi) untuk mendapatkan output yang berbeda.

Semua tergantung pada metode mana yang paling cocok untuk Anda :)

user876
sumber
2

Ini akan menjalankan semua file yang dapat dieksekusi yang bernama savetodatabase.sh di bawah direktori 2014 dan subdirektori, dan setiap executable akan dijalankan di dalam direktori-nya.

#!/usr/bin/env bash

find 2014 -type f -executable -name savetodatabase.sh | while read script
do
  cd "$(dirname "$script")"
  sh "$(basename "$script")"
  cd -
done

Tentu saja ini mengasumsikan bahwa file-file itu ditandai sebagai executable.

Parthian Shot
sumber