Chown: пропущенный операнд после «root: пользователи»

Вы можете поместить оболочку оболочки вокруг вызова python (поместите это в .zshrc или .bashrc ] ... в зависимости от вашей оболочки),

python () {
    if [ "$1" = manage.py ]; then
        command python manage.py && xyz
    else
        command python "$@"
    fi
}

Но я подозреваю, что вам лучше изменить manage.py на запуск xyz в конце (см. библиотеку подпроцесса python) или создание сценария оболочки,

manage.sh :

#! /bin/sh
python manage.py && xyz
5
02.01.2019, 04:02
2 ответа

Используйте рекурсивный переключатель на chown:

chown -R root:users dir

И это должно сработать.

Подробнее о том, почему у вас возникает ошибка :, если команда find не находит никаких файлов, то chown будет выполняться без операнда в конце, что генерирует эта ошибка.

Если вы действительно намерены придерживаться исходного формата команды, вы можете добавить переключатель-r в xargs, и он должен избавиться от ошибки, когда файлы не найдены.

14
27.01.2020, 20:31

В дополнение к наблюдению, что вы можете использовать флаг -Rдля chown, причина, по которой вы получаете сообщение об ошибке, почти наверняка[1] связана с тем, что у вас нет файлов, которые нужно изменить. В версии gnu xargsесть дополнительный флаг -r, указывающий xargs не запускать команду, если для команды нет ввода.

Однако использование xargsявляется неправильным подходом, POSIX-версия findбудет группировать команды для вас. Используйте

find. \( ! -user root -o ! -group users \) -exec chown -vc root:users {} +

обратите внимание на конечную +, а не на часто встречающуюся \;в примерах использования -exec. С \;команда запускается один раз для каждого соответствующего файла, но с +файлы группируются и запускаются пакетами.

В некоторых случаях xargs все же следует использовать, например, если вы хотите прочитать ввод и обработать строки парами, но это редко. Почти всегда вы хотите либо запустить команду для каждого файла, либо собрать как можно больше файлов и запустить одну команду для каждого пакета.

[1] В зависимости от реализации xargs вы могли точно заполнить несколько командных буферов файлами, но гораздо более вероятно, что файлов вообще не будет.

5
27.01.2020, 20:31

Теги

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