set -o errexit
может быть сложным в петлях и оболочках, потому что вы должны пройти путь обратно из процесса.
Нарушение петли (даже при нормальной работе) считается неправильной практикой. Вы можете называть меня старой школой, чтобы предпочитать while-loop, а не for-loop для двух условий, но я считаю, что лучше читать:
i=1
RET=-1
while [ $i -le 5 ] && [ $RET -ne 0 ]; do
[ $i -eq 1 ] || sleep 5
echo "attempt number: "$i
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
RET=$?
i=$((i+1))
done
exit $RET
-121--32402-
Проще делать группы [имя _ пользователя]
Если требуется перечислить всех локальных пользователей и их локальные группы, можно выполнить
cat/etc/passwd | awk -F ':"" {print $1} "| xargs -n1 groups
При получении" groups: команда не найдена, "вероятно, вы отредактировали свой путь к окружающей среде в худшую сторону, чтобы сбросить путь do PATH = $ (getconf PATH)
-121--5602-
OP сформулировал вопрос, чтобы исключить возможность использования команды groups . Поскольку это часть coreutils в Linux, либо (a) он был удален, либо (b) OP ошибается с именем.
OP могла использовать группы
, например:
for name in $(cut -d: -f1 /etc/passwd);do groups $name|grep -w sudo|awk '{print $1;}';done
Один предложенный ответ только grep 's для имени группы в /etc/group
. Иногда это работает так, как предполагалось.
Несколько лучше использование grep учитывает синтаксис /etc/group
:
group_name:password:GID:user_list
, так что только часть перед первой двоеточия является допустимым именем группы. Простая группа без учета синтаксиса может (и будет) получать вводящие в заблуждение совпадения из файла. Используйте регулярные выражения, чтобы сделать grep точно совпадающим с тем, что необходимо:
grep -E '^users:' /etc/group |sed -e 's/^.*://'
или используя переменную оболочки:
grep -E '^'$groupname':' /etc/group |sed -e 's/^.*://'
Однако, это только список тех, которые не входят в группу по умолчанию . Чтобы добавить эти , необходимо принять во внимание файл пароля, например, извлекая идентификатор группы из /etc/group
и печатая пользователей, чья группа по умолчанию совпадает с /etc/passwd
, например,
grp=$(awk -F: '$1 ~ /^users$/ {print $3; }'
Вы можете сделать то же самое, используя только grep и sed, но это больше работы, чем использование awk.
Еще один предложенный ответ, предложенный с помощью getent
, который также, вероятно, будет на машине Linux (с Debian, он является частью GNU libc). Однако быстрая проверка показывает, что он предоставляет только содержимое /etc/group
.
У меня (как и у большинства) не установлены либузеры
или крышка
, поэтому я не могу комментировать, удовлетворяет ли он условиям ОП.
Также существует программа id
, которая предоставляет информацию о группе. Кто-то может расширить это в качестве возможного ответа.
for f in *_200x200*; do
mv -- "$f" "${f/_200x200/}"
done
или если у вас есть команда perl rename
:
rename 's/_200x200//'./*_200x200*
Сzsh
:
autoload zmv # best in ~/.zshrc
zmv -n '(**/)(*)_200x200(*.png)' '$1$2$3'
(удалить -n
когда счастлив ).
Или для произвольных размеров:
zmv -n '(**/)(*)_<->x<->(*.png)' '$1$2$3'
(обратите внимание, что он удаляет только одно вхождение <width>x<height>
для имени файла ).