Одно из возможных объяснений состоит в том, что одна команда в цикле читает из stdin (, который в данном случае является тем же потоком, который read
предназначен для чтения из ). Как вы выяснили , это будет ffmpeg
, который позволяет пользователю управлять кодировкой с помощью клавиатуры (, если вы не передадите опцию -nostdin
), следовательно, чтение из стандартного ввода в получить пользовательский ввод.
Это одна из нескольких проблем, связанных с зацикливанием вывода find
.
Используйте:
find... -exec sh -c '
for mp4file do
...
done' sh {} +
стандартный синтаксис (, в котором stdin sh
и ffmpeg
не изменяется ), или один из других подходов, описанных в Почему зацикливание вывода find является плохой практикой? , что также устранит проблемы с именами файлов, которые содержат символы новой строки (или $IFS
содержат 4
с вашим подходом ).
Я предполагаю, что вы хотите только отобразить эти данные и ничего с ними не делать:
---
- hosts: all
tasks:
- name: show filesystems
debug:
msg: "mount: {{ item.mount }}, available: {{ item.size_available | human_readable }}"
loop: "{{ ansible_mounts }}"
loop_control:
label: ""
Этот плейбук будет отображать точку монтирования и доступный размер. Я использовал управление циклом _, чтобы не отображать каждый элемент со всеми свойствами в выводе Ansible.