Перенаправление ввода с использованием команды и параметров

El manual en la página que vincula está desactualizado y es incorrecto. Uno en la página de línea donde este error ya ha sido corregido es:

-size n[cwbkMG]
File uses n units of space, rounding up. The following suffixes can be used:
`b' for 512-byte blocks (this is the default if no suffix is used)
`c' for bytes
`w' for two-byte words
`k' for Kibibytes (KiB, units of 1024 bytes)
`M' for Mebibytes (MiB, units of 1024 * 1024 = 1048576 bytes)
`G' for Gibibytes (GiB, units of 1024 * 1024 * 1024 = 1073741824 bytes)

El manual de búsqueda de BSD sigue siendo incorrecto.

El manual de fecha más actualizado -a -es el man finden un sistema operativo actualizado.
Desde una versión de búsqueda de GNU (find (GNU findutils )4.7.0 -git )el manual va como:

-size n[cwbkMG]
File uses n units of space, rounding up. The following suffixes can be used:

`b' for 512-byte blocks (this is the default if no suffix is used)
`c' for bytes
`w' for two-byte words
`k' for Kibibytes (KiB, units of 1024 bytes)
`M' for Mebibytes (MiB, units of 1024 * 1024 = 1048576 bytes)
`G' for Gibibytes (GiB, units of 1024 * 1024 * 1024 = 1073741824 bytes)

Entonces, el problema ya ha sido resuelto en algunas versiones de find.

0
25.01.2016, 09:30
2 ответа

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

< 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" (предыдущая форма разделяла имя файла на две части).

3
29.04.2021, 00:18

Это одно из возможных решений:

объедините строку команды и параметров, чтобы нам не приходилось иметь дело с множеством круглых скобок.

command="$1 $2"
$command input_file > output_file

(Пожалуйста, дайте мне знать, если я что-то упускаю)

0
29.04.2021, 00:18

Теги

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