Ini seharusnya berhasil:
./program `cat file`
Jika Anda ingin seluruh konten file dalam satu argumen, tambahkan kutipan ganda (diuji dalam bash. Saya pikir Ini mungkin berbeda dari shell ke shell):
./program "`cat file`"
Perintah
./program "$(< file)"
Penjelasan
-
$(cmd)
menjalankan perintah dan mengubah hasilnya menjadi string.$(cmd)
juga dapat ditulis dengan backticks sebagai`cmd`
. Saya lebih suka$(cmd)
yang lebih baru karena bersarang lebih baik daripada backtick jadul. -
Perintah yang kita inginkan adalah
cat file
. Dan kemudian dari halaman bash man:Substitusi perintah
$(cat file)
dapat diganti dengan$(< file)
yang setara tetapi lebih cepat . -
Tanda kutip di sekitarnya memastikan bahwa spasi putih dipertahankan, kalau-kalau Anda memiliki spasi atau baris baru di dalam file Anda. Mengutip hal-hal dengan benar dalam skrip shell adalah keterampilan yang sangat kurang. Mengutip variabel dan substitusi perintah adalah kebiasaan yang baik untuk dilakukan sehingga Anda tidak mendapatkan bit nanti ketika nama file atau nilai variabel Anda memiliki spasi atau karakter kontrol atau keanehan lainnya.
Anda dapat menggunakan salah satu dari:
./program $(cat file)
./program "$(cat file)"
Yang terakhir berguna jika mungkin ada banyak kata dalam file dan Anda ingin mereka diperlakukan sebagai argumen tunggal. Bagaimanapun, saya lebih suka menggunakan if $()
ke backticks hanya karena kemampuannya untuk membuat sarang (yang mungkin bukan persyaratan dalam hal ini).
Perlu diingat juga bahwa jawaban ini (dan lainnya) lebih terkait dengan shell yang digunakan daripada Linux itu sendiri. Sejak dominan
shell sepertinya bash
, saya telah membuat kode khusus untuk itu.
Ini sebenarnya cara yang cukup umum untuk mematikan proses di bawah tampilan UNIX. Daemon (seperti cron
) akan menulis ID prosesnya ke file (seperti /var/cron.pid
) dan Anda dapat menandainya dengan sesuatu seperti:
kill -HUP $(cat /var/cron.pid)