2015-10-11 4 views
0

Я новичок в программировании bash и борюсь с этой одной частью моей программы. Я знаю, как использовать позиционные параметры, чтобы ссылаться на определенные элементы командной строки, однако я могу заставить это работать, только если файл указан. Как я могу использовать позиционные параметры со стандартным вводом, как так:Как использовать позиционные параметры со стандартным входом в Bash

cat test_file | stats -r 

В этом случае, я могу сослаться на статистику с «$ 0» и -r с «$ 1», но как я могу сослаться на кот test_file части? Для контекста Stats - это моя программа, которая находит среднюю и медианную числа в тестовом файле. «-r» указывает на то, что программа должна читать каждую строку программы Когда командная строка записывается следующим образом:.

stats -r test_file 

Я использую этот код для обозначения -r

if [[ "${1:0:2}" == '-r' ]] 
    do stuff 
+1

_but Как я могу обратиться к части 'cat test_file'? _ Короткий ответ: вы не можете! –

+0

Если нет позиционного аргумента (который вы можете сказать, посмотрев на '$ #'), вы должны просто прочитать его из stdin. Это будет работать с трубами, а также в случае, когда пользователь хочет ввести непосредственно в программу. – rici

+0

Как я мог читать со стандартного ввода, если мне нужно было использовать его в качестве аргумента для функции? Поэтому с позиционными параметрами я вызываю функцию следующим образом: rows_stats $ 2, где $ 2 относится к имени файла. Как я могу сделать то же самое с помощью стандартного ввода? – user2466886

ответ

-1

Попробуйте это : stats -r "$(cat test_file)"

+0

Да, но это для задания, и грейдеры будут явно пытаться использовать «cat test_file | stats-r», чтобы увидеть, работает ли программа таким образом. – user2466886

-1

Ответ:.. Как люди заявили, вы не можете использовать позиционные параметры в этой ситуации Единственной альтернативой является чтение из стандартного ввода и в моем случае хранить его в переменной перейти к функции

Читайте здесь, чтобы узнать больше, как это сделать: How to read mutliline input from stdin into variable and how to print one out in shell(sh,bash)?

+0

Как хранить stdin в переменной поможет вам передать ее функции, ожидающей имени файла? (Если вам нужно ссылаться на stdin, используя имя файла, это '/ dev/stdin'.) – rici