Bagaimana argumen yang dikutip ditangani oleh / bin / waktu


1

Saya menghitung waktu biner khusus dalam bentuk: ./prog --opt1=arg1 --opt2=arg2 --opt3="arg3"

Diperlukan opsi ketiga memiliki argumen yang dikutip. Dalam skrip saya menyimpan semua opsi:

exec=./prog
opts="--opt1=arg1 --opt2=arg2 --opt3=\"arg3\""

Ketika saya mencoba menghitung waktu program, saya mendapatkan kesalahan dengan program saya menguraikan argumen. Saya menduga itu karena ia melihat argumen terakhir sebagai tidak dikutip. Output dari /bin/time:

\bin\time -v $exec $opts

Error parsing args (dari program saya)
Command being timed: "./prog --opt1=arg1 --opt2=arg2 --opt3="arg3""

Namun ketika saya salin dan rekat, apa itu klaim perintahnya adalah, itu berjalan dengan baik:

./prog --opt1=arg1 --opt2=arg2 --opt3="arg3" --mulai baik-baik saja

apa yang /bin/time lakukan dan bagaimana cara memperbaikinya? Saya kira itu ada hubungannya dengan tanda kutip, seperti mungkin berjalan eval atau sesuatu. Saya tidak yakin apa yang harus saya lakukan.

Jawaban:


0

Saya memperbaiki ini dengan mengatur seluruh perintah ke variabel, dan kemudian mengevaluasi bahwa:

$ full_cmd="/bin/time -v $exec $opts"
$ eval $full_cmd


eval adalah cara yang salah untuk melakukan ini; ia memiliki reputasi yang pantas untuk menyebabkan bug yang tak terduga (dan kadang-kadang tidak dapat dipahami). Lihat BashFAQ # 50: Saya mencoba untuk menempatkan perintah dalam variabel, tetapi kasus kompleks selalu gagal! (dan banyak jawaban sebelumnya yang menghubungkannya) untuk ide yang lebih baik.
— Gordon Davisson
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.