ошибка при использовании su -c: bash: нет управления заданиями в этой оболочке

Альтернативный способ - комбинировать 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
2
30.05.2016, 04:20
1 ответ

Причина такого поведения задокументирована на странице руководства для последних версий 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

В прошлом su -c запускалось управляющий терминал, когда не запущена интерактивная оболочка. Выполнение apt-get changelog login в моей системе Ubuntu показывает, что удаление управляющего терминала было введено в мае 2012 года в качестве меры безопасности:

  • su: Устранение возможного перехвата tty путем отбрасывания управляющего терминала, когда { {1}} выполнение команды (CVE-2005-4890). Закрывает: # 628843
4
27.01.2020, 22:04

Теги

Похожие вопросы