Saya punya situasi ini:
./
./myscript.sh
./arguments.txt
./test.sh
Di dalam myscript.sh
, saya harus menjalankan file test.sh
, menyampaikan argumen yang terkandung di dalamnya arguments.txt
.
myscript.sh adalah:
arguments=$(cat arguments.txt)
source test.sh $arguments
Ini berfungsi dengan baik jika jika arguments.txt berisi paling banyak satu argumen:
firstargument
Substitusi adalah:
++ source test.sh 'firstargument'
Tetapi masalahnya adalah dengan dua atau lebih argumen. Ia melakukan ini:
++ source test.sh 'firstargument secondargument'
Juga, saya tidak tahu sebelumnya jumlah argumen di dalamnya arguments.txt
. Bisa ada nol atau lebih.
bash
shell-script
scripting
Federico Ponzi
sumber
sumber
source test.sh "$arguments"
dengan tanda kutip? Itu akan menjadi salah satu penjelasan untuk deskripsi Andasource test.sh "$arguments"
dansource test.sh $arguments
keduanya menghasilkansource test.sh 'firstargument secondargument'
.Jawaban:
Dengan asumsi setiap baris
arguments.txt
mewakili argumen terpisah, dengan bash 4 Anda dapat membacaarguments.txt
ke dalam array menggunakanmapfile
(setiap baris dari file masuk sebagai elemen array, secara berurutan) dan kemudian meneruskan array ke perintahKeuntungannya adalah bahwa pemisahan pada ruang yang tertanam di dalam garis dihindari
Dengan versi bash yang lebih rendah
sumber
Anda dapat melakukannya dengan
awk
. Sebagai contoh:Edit setelah membaca komentar Anda:
sumber
Saya akan menyarankan menggunakan fungsi dengan while / do loop untuk beralih melalui file argumen.
Cukup buat file yang berisi fungsi dan panggil file test.sh di dalam fungsi untuk beralih melalui argumen yang terdapat dalam file arguments.txt.
sumber