Jadi saya menulis skrip nautilus kecil ini untuk mentranskode video ke mp3:
#! /bin/bash -x
if [ -z "$1" ]
then
zenity --warning --text="Error - No file selected !"
exit 1
fi
BASEFILENAME=${1%.*}
exec ffmpeg -i "$1" -ab 256k "$BASEFILENAME.mp3" &&
if [ "$?" -eq 0 ]
then
zenity --info --text="Converting successful"
exit
fi
Masalahnya adalah, meskipun perintah ffmpeg berhasil dijalankan if [ "$?" -eq 0 ]
sepertinya tidak dipicu. Mengapa demikian? Apakah yang &&
salah atau itu sesuatu yang lain?
&&
perintah ffmpeg setelah itu, ia benar-benar berfungsi. Saya masih punya satu pertanyaan lagi, apakah boleh di tempat ini - apakah ada cara untuk menampilkan stdout dan stderr ffmpeg di suatu tempat tanpa menggunakan jendela terminal? Seperti di zenity, fe$()
konstruk ke dalam variabel, lalu meneruskan variabel itu kezenity
. Watch out untuk mengutip, danzenity
dalam pengalaman saya menggunakan Pango sehingga Anda perlu mengganti<
,&
,>
dengan<
,&
,>
masing-masing.The
exec command
pernyataan menggantikan shell saat ini dengancommand
. Artinya, skrip Anda secara aktuil berakhir pada barisexec ffmpeg ...
; baris yang tersisa akan dieksekusi jika dan hanya jikaffmpeg
perintah tidak ditemukan di PATH Anda (atau tidak dapat diluncurkan karena alasan lain).Anda bisa mendapatkan detail lebih lanjut tentang
exec
bash built-in dengan mengetikkanhelp exec
pada prompt perintah bash:sumber
Menurut ini
exec
menggantikan shell dengan perintah yang Anda tentukan. Jadi skrip Anda tidak pernah sampai ke perintah yang melewatiexec
.Anda tidak perlu
exec
. Cukup tentukan perintahnya.sumber
Anda dapat menyimpan
exec
perintah jika Anda memasukkannya ke dalam subkulit:sumber
&&
masih ada yang salah di sana?exec
?