Для получения всех их, необходимо будет использовать код как отправленный mmckinst, но если Вы просто хотите проверить $releasever
можно работать yum version nogroups
на RHEL-6.
Другая вещь сделать, в RHEL-6, состоит в том, чтобы просто создать Ваше собственное в /etc/yum/vars
.
Ваш путь добавляет разрывы строки к каждой вещи, которую он пишет в пространстве любого разделителя ($IFS
) использование должно разделить чтение. Вместо того, чтобы разбиться это на новые строки просто берет все это и проводит его. Можно уменьшить весь бит кода выше к этому:
cat - > $file
Вам не нужен усеченный бит, это усечет и выпишет целый поток STDIN к нему.
Править: При использовании zsh, можно просто использовать > $file
вместо кошки. Вы перенаправляете в файл и усекаете его, но если существует что-нибудь зависающее там ожидающий чего-то для принятия STDIN, он будет считан в той точке. Я думаю, что можно сделать что-то вроде этого с ударом кроме Вас, должен был бы установить некоторый специальный режим.
Для чтения текстового файла буквально не используйте плоскость read
, который обрабатывает вывод двумя способами:
read
интерпретирует \
как символ ESC; использовать read -r
выключить это.read
разделения в слова на символах в $IFS
; набор IFS
к пустой строке для выключения этого.Обычная идиома для обработки текстового файла линию за линией
while IFS= read -r line; do …
Для объяснения этой идиомы посмотрите, Почему while IFS= read
используемый так часто, вместо IFS=; while read..
?.
Для записи строки буквально только используйте плоскость echo
, который обрабатывает строку двумя способами:
echo
Escape обратной косой черты процессов. (На ударе это зависит ли xpg_echo
опция установлена.)-n
или -e
(точный набор зависит от оболочки).Портативный способ распечатать строку буквально с printf
. (В ударе нет никакого лучшего пути, если Вы не знаете, что Ваш вход не похож на опцию к echo
.) Используют первую форму для печати точной строки и второй формы, если Вы хотите добавить новую строку.
printf %s "$line"
printf '%s\n' "$line"
Это только подходит для обработки текста, потому что:
Вы не можете обработать двоичные данные в оболочке, но современные версии утилит на большинстве нельдов могут справиться с произвольными данными. Для передачи всего входа до вывода использовать cat
. Продолжение на касательную, echo -n ''
сложный и непортативный способ ничего не сделать; echo -n
был бы так же, как хороший (или не в зависимости от оболочки), и :
является более простым и полностью портативным.
: >| "$file"
cat >>"$file"
или, более простой,
cat >|"$file"
В сценарии Вы обычно не должны использовать >|
с тех пор noclobber
прочь по умолчанию.
Это сделает точно, что Вы хотите:
( while read -r -d '' ; do
printf %s'\0' "${REPLY}" ;
done ;
# When read hits EOF, it returns non-zero which exits the while loop.
# That data still needs to be output:
printf %s "${REPLY}"
) >> ${file}
Действительно отметьте использование памяти все же. Это читает вход разграниченным пустым указателем способом.
Если существует нет \0
пустые байты во входе затем колотят, должен будет сначала считать все содержание входа в память и затем произвести его.
Относительно Вашего усеченного шага:
echo -n '' >| "$file" #Truncate the file
намного более простое и эквивалентное:
> ${file} #Truncate the file
> $file
. Это только работает первой вещью, которая ищет stdin в родительском сценарии оболочки. В основном весь код David может быть уменьшен до отдельного символа, но я думаюcat -
более изящно и меньше проблемы prode, потому что она понята на виде. – Caleb 19.08.2011, 23:10cat
s вместе, только для раздражения фанатиков – Michael Mrozek♦ 19.08.2011, 23:32cat
просто, таким образом, люди, которые настаивают на том, чтобы использовать его обязательно, должны сделать умственную гимнастику для чтения кода. Именованные каналы являются также хорошими целями. – Caleb 19.08.2011, 23:37