Tohle by mělo stačit:
./program `cat file`
Pokud chcete celý obsah souboru v jediném argumentu, přidejte dvojitou uvozovku (testováno v bash. Myslím, že se to může lišit shell od shellu):
./program "`cat file`"
Příkaz
./program "$(< file)"
Vysvětlení
-
$(cmd)
spustí příkaz a převede jeho výstup na řetězec.$(cmd)
lze také zapsat zpětným zatržením jako`cmd`
. Preferuji novější$(cmd)
protože se to hnízdí lépe než staré školy backticcks. -
Požadovaný příkaz je
cat file
. A pak z manuálové stránky bash:Náhrada příkazu
$(cat file)
lze nahradit ekvivalentním, ale rychlejším$(< file)
. -
Uvozovky kolem ní zajišťují, že mezery jsou zachovány, pro případ, že máte v souboru mezery nebo nové řádky. Správně citovat věci ve skriptech shellu je dovednost, která velmi chybí. Citování proměnných a substitucí příkazů je dobrým zvykem, abyste se o něco později nedostali, když názvy souborů nebo hodnoty proměnných obsahují mezery nebo řídicí znaky nebo jiné podivnosti.
Můžete použít jeden z:
./program $(cat file)
./program "$(cat file)"
To je užitečné, pokud v souboru může být více slov a chcete, aby se s nimi zacházelo jako s jedním argumentem. V každém případě preferuji použití if $()
zpětné zarážky jednoduše kvůli jeho schopnosti vnořovat se (což pravděpodobně není požadavek v tomto případě).
Také mějte na paměti, že tato odpověď (a další) souvisí spíše s používaným shellem než samotným Linuxem. Vzhledem k tomu, že převládající
shell se zdá být bash
, naprogramoval jsem to speciálně pro to.
Toto je ve skutečnosti poměrně běžný způsob zabíjení procesů pod podobnými systémy UNIX. Démon (jako cron
) zapíše své ID procesu do souboru (například /var/cron.pid
) a můžete to signalizovat něčím jako:
kill -HUP $(cat /var/cron.pid)