Альтернативный способ - комбинировать rm с find и / или xargs. Вот несколько альтернатив:
find "$output" -name *.gz -type f -delete
find "$output" -name "*.gz" -type f -exec rm '{}' \;
find "$output" -name *.gz -type f -print0 | xargs -0 rm
PS: тип f означает поиск файлов.
По умолчанию find ищет все подкаталоги. Вы можете ограничить операцию поиска текущим каталогом, если требуется, используя параметр maxdepth:
find "$output" -maxdepth 1 -name "*.gz" -type f -exec rm '{}' \;
Если вам нужно продолжать работать с rm и переменной, это сработало для меня в одной строке:
out="/home/gv/Desktop/PythonTests/appsfiles";rm "$out"/*.txt
rm: remove regular file '/home/gv/Desktop/PythonTests/appsfiles/a.txt'? y
rm: remove regular file '/home/gv/Desktop/PythonTests/appsfiles/a ver 1.txt'? y
rm: remove regular file '/home/gv/Desktop/PythonTests/appsfiles/b.txt'? y
rm: remove regular file '/home/gv/Desktop/PythonTests/appsfiles/c.txt'? y
rm: remove regular file '/home/gv/Desktop/PythonTests/appsfiles/d.txt'? y
Причина такого поведения задокументирована на странице руководства для последних версий su
:
-c, --command КОМАНДА
Укажите команду, которая будет вызываться оболочкой с использованием ее
-c
.У выполненной команды не будет управляющего терминала . Эту опцию нельзя использовать для выполнения интерактивных программ, которым требуется управляющий телетайп.
(курсив мой)
Когда вы запускаете основные команды, такие как ls
, echo
или bash --version
, они просто выводят свой вывод в поток stdout
без использования управляющего терминала.
Я подозреваю, что либо вызывается bash
(как интерактивная оболочка), либо some-script.sh
содержит команды, требующие запуска управляющего терминального устройства 'bash some-script.sh'
выдает ошибку не удается установить группу процессов терминала (-1): неподходящий ioctl для устройства
.
Управляющий терминал для процесса - это оконечное устройство, с которого процесс был запущен. Управляющий терминал может отправлять сигналы группам процессов и является механизмом, с помощью которого управление заданиями работает в операционных системах Unix; Управление заданиями позволяет процессам в группе процессов запускаться на переднем плане или в фоновом режиме.
Выходные данные команды ps
показывают управляющий терминал для каждого процесса, например,
$ ps
PID TTY TIME CMD
3614 pts/5 00:00:00 bash
31628 pts/5 00:00:00 ps
В прошлом su -c
запускалось управляющий терминал, когда не запущена интерактивная оболочка. Выполнение apt-get changelog login
в моей системе Ubuntu показывает, что удаление управляющего терминала было введено в мае 2012 года в качестве меры безопасности:
- su: Устранение возможного перехвата tty путем отбрасывания управляющего терминала, когда { {1}} выполнение команды (CVE-2005-4890). Закрывает: # 628843