cat YOURFILE | xargs yum -y install
Это почти то же самое, что и решение @daisy, за исключением того, что если список пакетов слишком длинный для командной строки, он разбивает его на отдельные yum install
команды.
Я бы не стал использовать grep
. Вместо этого я бы сравнил имя файла, используя встроенный -в test
оператор ([[
... ]]
), который может напрямую обрабатывать регулярные выражения.
function getname(){
local fname="$1"
[[ -z "$fname" ]] && read -p "Enter a file name: " fname
until [[ "$fname" =~ ^[[:alpha:]] ]] && [[ -f "$fname" ]]
do
[[ -d $fname ]] && echo "Paths are not a legal file name."
read -p "Enter a legal file name: " fname
done
}
Если вы должны использовать grep
, то я подозреваю, что проблема с вашей реализацией заключается в том, что вместо2>&1
(объединить стандартную ошибку и стандартный вывод )вы написали2>1&
(отправить стандартную ошибку в файл с именем 1
и поместите команду в фон оболочки ). Это предотвращает передачу состояния выхода grep
условному оператору.
FWIW вы можете использовать -q
для тихого выхода, и я не думаю, что вам вообще нужна подоболочка -вы можете просто написать
until grep -qE '^[a-zA-Z_]\w+' <<< "$fname"; do