Запуск команд сразу

Вы неправильно понимаете синтаксис. Во-первых, перенаправление ввода имеет символ < перед файлом, а не позади него. Порядок действий не важен. Итак, синтаксис:

< inputfile command options > outputfile

или

command options < inputfile > outputfile

(или другие варианты).

Тогда у вас также есть лишние $ . Что вам действительно нужно сделать, так это

$program $options <$inputfile >$outputfile

. Вы можете заменить $ {program} и $ {options} на $ 1 и $ 2 .

В этой форме вы можете сделать

#!/bin/bash
<names.txt $1 $2 >test.out

и назвать это как ./ выполнить cat -n или даже ./ выполнить cat '-n -s' , если хотите более одного варианта. В этой форме у вас может быть несколько вариантов, но вы должны заключить их в кавычки (поскольку $ 2 ) не цитируются, пробелы расширяют параметр обратно на несколько слов.

Другой (лучший) способ сделать это - просто использовать

#!/bin/bash
<names.txt "$@" >test.out

Теперь вы можете передать произвольное количество параметров в сценарий, и вы можете даже заключить строки в кавычки в аргументах, и они останутся вместе после распространения в сценарий. Теперь это работает: ./ выполнить cat -n - "bla bla.txt" (предыдущая форма разделяла имя файла на две части).

5
31.07.2016, 23:51
0 ответов

Теги

Похожие вопросы