Автор Тема: Цикл for для apt  (Прочитано 1253 раз)

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 140
  • ^_^
Цикл for для apt
« : 11.11.2019 15:06:01 »
   Всем привет! Столкнулся со следующей ошибкой:
$ for name in $(cat package_name.txt); do apt-cache show $name | grep -E "Package:|Version:|Architecture:|section:" >> rpminfo; done
W: Невозможно найти пакет Xdialog
...
На машине с zsh эта команда отработала как нужно, да и на bash отрабатывает если не оборачивать в цикл for.
Дело в bash или в чём то ещё, можете подсказать?

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Re: Цикл for для apt
« Ответ #1 : 11.11.2019 16:19:19 »
Попробуйте использовать цикл while для построчного чтения файла:
while read line; do echo $line; done < package_name.txt
Сноси Винду, переходи на Линукс ! :)

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 140
  • ^_^
Re: Цикл for для apt
« Ответ #2 : 11.11.2019 16:56:57 »
Не помогло:
$ while read line; do apt-cache show $line | grep -E "Package|Version:|Architecture|Section" >> package_info.txt; done < package_name.txt
W: Невозможно найти пакет Xdialog
E: Не найдено ни одного пакета
...

Проблема на машине с bash=3.2
На машине с bash=4.2 проблем нет.

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Re: Цикл for для apt
« Ответ #3 : 11.11.2019 17:03:16 »
Может на проблемной машине нужно сделать сначала:
apt-get update
Сноси Винду, переходи на Линукс ! :)

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 140
  • ^_^
Re: Цикл for для apt
« Ответ #4 : 11.11.2019 17:08:04 »
В том то и дело что если в цикл не оборачивать то всё работает:
$ apt-cache show Xdialog | grep -E "Package|Version:|Architecture|Section"
Package: Xdialog
Section: Development/Other
Version: 2.3.1-alt1@1571654306
Architecture: x86_64

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Re: Цикл for для apt
« Ответ #5 : 11.11.2019 17:16:24 »
bash=3.2
Не знаю, у меня работает на SL 8.2.0.

$ rpm -q bash
bash-3.2.57-alt1
$ echo 'Xdialog' > package
$ while read line; do apt-cache show $line | grep -E "Package|Version:|Architecture|Section"; done < package
Package: Xdialog
Section: Development/Other
Version: 2.3.1-alt1@1183741623
Architecture: x86_64

Сноси Винду, переходи на Линукс ! :)

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Re: Цикл for для apt
« Ответ #6 : 11.11.2019 17:19:39 »
Покажите:
file package_name.txt
Сноси Винду, переходи на Линукс ! :)

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 140
  • ^_^
Re: Цикл for для apt
« Ответ #7 : 11.11.2019 17:21:18 »
Там 645 записей, такого вида:
Xdialog
alterator-groups
alterator-luks
alterator-notes
alterator-officer
alterator-zabbix-agent
alterator-zabbix-node-common
altlinux-freedesktop-menu-generic
altlinux-freedesktop-menu-kde4
altsp-test-progs
altsp-test-scripts
apache2-mod_ssl
aspell

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 140
  • ^_^
Re: Цикл for для apt
« Ответ #8 : 11.11.2019 17:26:00 »
bash=3.2
Не знаю, у меня работает на SL 8.2.0.

$ rpm -q bash
bash-3.2.57-alt1
$ echo 'Xdialog' > package
$ while read line; do apt-cache show $line | grep -E "Package|Version:|Architecture|Section"; done < package
Package: Xdialog
Section: Development/Other
Version: 2.3.1-alt1@1183741623
Architecture: x86_64

У меня и bash=4.2 не делает. Только zshell отрабатывает по for и while.

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Сноси Винду, переходи на Линукс ! :)

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 140
  • ^_^

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
Re: Цикл for для apt
« Ответ #11 : 11.11.2019 17:42:25 »
Вот так подразумевалось:
$ file package_name.txt
package_name.txt: ASCII text, with CRLF line terminators

Сделайте так:
$ dos2unix package_name.txt
Затем повторите выполнение цикла.
Сноси Винду, переходи на Линукс ! :)

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 140
  • ^_^
Re: Цикл for для apt
« Ответ #12 : 11.11.2019 17:51:04 »
Вот так подразумевалось:
$ file package_name.txt
package_name.txt: ASCII text, with CRLF line terminators

Сделайте так:
$ dos2unix package_name.txt
Затем повторите выполнение цикла.

Теперь получилось. Спасибо большое добрый человек!