Как запустить новый сеанс tmux в iTerm2 в отдельном окне?

Это элементарный скрипт с позиционными параметрами, сохраните приведенный ниже код в файл с именем fill_group.sh и сделайте его исполняемым с помощью chmod + x fill_group.sh .

Затем добавьте его в каталог PATH ( / usr / local / bin ) или выполните его в том же каталоге, где он находится, с помощью ./ fill_group.sh . .. .

#!/bin/sh
#
# Name: fill_group.sh
# 
# Usage: 
# fill_group.sh <group_name> <user1> <user2> ... <userN>
#
# Description:
# add users to specific group passed as first parameter. 
# If the group doesn't exists add it to the system.
set -eu

# Exit if there is not at least 2 args (group,user1)
if [ $# -lt 2  ]; then exit 5; fi

group="${1}"; shift # extract group from arguments
if ! egrep --quiet "^${group}:" /etc/group; then
  sudo groupadd "${group}"
fi

for user in "${@}"; do
    sudo usermod -a -G "${group}" "${user}"
done
2
05.07.2018, 00:56
2 ответа

Соответствующая справочная страница для проверки — это страница самой оболочки, bash, поскольку -f— это функциональность, предоставляемая оболочкой, это встроенный -bash.

В моей системе (CentOS 7 )это описано в прекрасной справочной странице. grepможет не давать таких же результатов для других дистрибутивов. Тем не менее, если вы запустите man bash, а затем выполните поиск «-f», это должно дать требуемые результаты.

$ man bash | grep -A1 '\-f file$'
       -f file
              True if file exists and is a regular file.
$
10
27.01.2020, 21:49

Короче говоря, фрагмент кода будет исходным файлом /etc/bashrc, если он существует, и его существование проверяется командой [, для которой -fявляется оператором/параметром.

Оператор

if...then...else...fiв сценариях оболочки оценивает статус выхода команд -0 в случае успеха. Поэтому правильно сделать что-то вроде этого:

if ping -c 4 google.com; then
    echo "We have a connection!"
fi

В вашем случае это команда [, также известная как команда test. Так что было бы совершенно правильно

if test -f /etc/bashrc; then
   . /etc/bashrc
fi

Флаг -f проверяет две вещи: :указанный путь существует и является обычным файлом. Если /etc/bashrcна самом деле является каталогом или отсутствует, тест должен возвращать не -нулевой статус выхода, чтобы сигнализировать об ошибке

Эта команда изначально была отдельной командой, которая не является частью команд оболочки, встроенных -. В настоящее время большинство Bourne-подобных -оболочек уже имеют встроенную -, и это то, что оболочка будет использовать.

Кстати, /etc/bashrcкажется ненужным дополнительным файлом, который использует ваш администратор или первоначальный автор фрагмента кода. Существует файл /etc/bash.bashrc, предназначенный для системного -широкополосного rc-файла -для bash, поэтому можно ожидать, что он будет использоваться.

См. также:

15
27.01.2020, 21:49

Теги

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