Try showmount -e ipaddressOfWindows |grep -i \D:\
Вы получите сетевые группы, Сделайте сервер или компьютер членами этих сетевых групп. Команда mount будет зависеть от типа, CIFS или NFS?
решение grep
Используйте функцию «-w» функции grep
, чтобы сопоставить слово. Осмелюсь сказать, что он не будет работать на старых grep
реализациях, таких как Solaris, AIX и т. д.
echo $IGNORE_USER | grep -qw $USER && exit_program 'bye bye'
внутреннее решение bash
Перейдите полностью на bash и не полагайтесь на grep
.
bash
не позволяет использовать конструкцию =~ regex
, если вы сначала не запустите shopt -s compat31
. Таким образом, используя =~ $(echo regex)
, мы можем преодолеть это. В этом примере мы используем двойные кавычки, так что $USER
расширяется, и при этом нам нужно экранировать \b
, чтобы он был \\b
.
[[ $IGNORE_USER =~ $(echo "\\b$USER\\b") ]] && exit_program 'bye bye'
Этот сценарий не работает.
У вас есть синтаксическая ошибка в первой строке: присваивание IGNORE_USER
не должно разыменовывать переменную с помощью $
. В вашем операторе if
есть еще одна синтаксическая ошибка. Используйте [ "string1" = "string2" ]
для сравнения строк.
В вашем коде используется $IGNORE_USER
без кавычек. Это разбивает строку на пробелы, что вы и хотите сделать. В самом общем случае это а не то, что вы хотите сделать, поскольку элементы в списке вполне могут содержать пробельные символы, которые следует сохранить. Оболочка также будет выполнять генерацию имени файла (подстановку )значений в строке, если она используется без кавычек.
Было бы лучше использовать для этого массив, так как вы имеете дело с отдельными элементами (именами пользователей ). Всякий раз, когда вы хотите обрабатывать отдельные элементы как отдельные элементы, не помещайте их в одну строку. Это потенциально затруднит отличить один элемент от другого.
Предложение:
ignore=( 'user1' 'user2' 'user3' )
for u in "${ignore[@]}"; do
if [ "$USER" = "$u" ]; then
exit_program 'bye bye'
fi
done
Это предполагает, что exit_program
обеспечивает выход из программы. Если нет, добавьте exit
после вызова exit_program
. Нет необходимости проверять, пуст ли массив ignore
, так как в этом случае цикл не выполнил бы ни одной итерации.
В приведенном выше коде"${ignore[@]}"
(обратите внимание, что двойные кавычки )расширяются до списка имен пользователей, каждое имя пользователя заключено в кавычки и защищено от дальнейшего разделения слов и создания имен файлов.
Связанные:
Для версии, не относящейся к bash
,но это будет работать в любой POSIX -, такой как оболочка:
set -- 'user1' 'user2' 'user3'
for u do
if [ "$USER" = "$u" ]; then
exit_program 'bye bye'
fi
done
Здесь вместо массива используется список позиционных параметров в качестве списка имен пользователей, которые следует игнорировать.