Подтвердить что ты не робот

Используя linux, как я могу передать содержимое файла в качестве параметра исполняемому файлу?

скажем, я хочу запустить ./program со строковым аргументом

вместо ввода    ./program string каждый раз, как я могу сделать ./program <file>, где <file> - это файл, содержащий строку?

Благодарю

4b9b3361

Ответ 1

Это должно сделать трюк:

./program `cat file`

Если вы хотите, чтобы весь файл содержался в одном аргументе, добавьте двойную кавычку (проверено в bash. Я думаю, что она может меняться от оболочки к оболочке):

./program "`cat file`" 

Ответ 2

Command

./program "$(< file)"

Объяснение

  • $(cmd) запускает команду и преобразует ее вывод в строку. $(cmd) также может быть записан с обратными окнами как `cmd`. Я предпочитаю более новый $(cmd), поскольку он гнездится лучше, чем предыдущие образы старой школы.

  • Нам нужна команда cat file. А затем из страницы bash man:

    Подстановка команды $(cat file) может быть заменена эквивалентной, но быстрее $(< file).

  • Кавычки вокруг него гарантируют, что пробелы сохранены, на всякий случай, если в вашем файле есть пробелы или символы новой строки. Правильное цитирование вещей в сценариях оболочки - это навык, которого не хватает. Котировка переменных и подстановок команд является хорошей привычкой к добру, поэтому вы не получите бит позже, когда ваши имена файлов или значения переменных имеют пробелы или управляющие символы или другие странности.

Ответ 3

Вы можете использовать один из:

./program $(cat file)
./program "$(cat file)"

Последнее полезно, если в файле может быть несколько слов, и вы хотите, чтобы их рассматривали как один аргумент. В любом случае, я предпочитаю использовать if $() для обратных ссылок просто из-за его способности к гнезду (что, вероятно, не является требованием в этом случае).

Также имейте в виду, что этот ответ (и другие) больше связан с используемой оболочкой, а не с самим Linux. Поскольку преобладающая оболочка и лучшая: -) кажется bash, я специально для этого кодировал.

На самом деле это довольно распространенный способ уничтожения процессов под изображениями UNIX. Демон (например, cron) будет записывать свой идентификатор процесса в файл (например, /var/cron.pid), и вы можете сообщить ему что-то вроде:

kill -HUP $(cat /var/cron.pid)

Ответ 4

Другим вариантом является xargs:

cat file | xargs ./program

Я лично считаю, что эту версию легче читать, особенно если вы делаете больше, чем просто файл.

На странице man:

xargs считывает элементы из стандартного ввода, разделенные пробелами или символами новой строки, и выполняет команду один или несколько раз с любыми начальными аргументами, за которыми следуют элементы, считанные со стандартного ввода.

Говоря простым языком, xargs выполнит. /program для каждой строки/слова, которое отправляется на него.

См. man xargs для получения дополнительных параметров.

Ответ 5

Все приведенные выше ответы работают, но я считаю, что самый простой и простой вариант -

xargs < file ./program