Используя whoami для поиска файлов, в которых упоминается пользователь

Я нашел причину, по которой это не сработало.

В конфигурации PuTTy мне пришлось изменить настройки сеанса следующим образом:

Соединение -> Данные -> Сведения о терминале -> Строка типа терминала

Значение было: xterm {{ 1}} Я изменил его на linux

Теперь я могу использовать клавиши Home + End в Bash и Screen.

echo $ TERM покажет linux за пределами экрана и screen.linux внутри экрана.


ОБНОВЛЕНИЕ 23 октября 2018 г.

Я нашел гораздо более простое решение!

Просто запустите экран с помощью этой команды:

TERM = linux screen

или поместите эту строку в свой ~ / .bashrc :

alias screen = 'TERM = linux screen'

6
08.10.2018, 16:54
2 ответа

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

#!/bin/sh
grep -wF -e "$LOGNAME" "$1"

В качестве альтернативы, если вы действительно хотите использоватьwhoami:

#!/bin/sh
grep -wF -e "$(whoami)" "$1"

Или, для требования "двух строк":

#!/bin/sh
name=$(whoami)  # or:  name=$LOGNAME
grep -wF -e "$name" "$1"

Или, если мы хотим сделать что-то полезное в этой первой строке:

#!/bin/sh
[ ! -f "$1" ] && { printf 'No such file: %s\n' "$1" >&2; exit 1; }
grep -wF -e "$(whoami)" "$1"

Опция -wдля grepобеспечивает соответствие только полным словам. grep -w 'AA'будет соответствовать AA, но не AAA.

Параметр -Fдля grepзаставляет утилиту принимать данное выражение как фиксированную строку, а , а не как регулярное выражение.

Параметр -eозначает, что следующая строка в командной строке является шаблоном. Без него шаблон, начинающийся с тире, может быть ошибочно интерпретирован как набор параметров командной строки.

Во многих системах )переменная$LOGNAME(или $USERсодержит имя текущего пользователя.

Значение $1— это первый аргумент командной строки, передаваемый сценарию в командной строке.

Также обратите внимание, что мы можем выполнить это с /bin/sh, а не с bash, так как этот скрипт не использует никаких специальныхbash-специфических расширений оболочки. Очевидно, он будет работать так же хорошо при bash...

.

Обратите внимание, что приведенное выше не ищет файлы , в которых упоминается конкретный пользователь (, как в заголовке вопроса ), а скорее ищет строк в файле который упоминает этого пользователя.

Поиск файлов с упоминанием текущего пользователя в каталоге , указанном в командной строке:

#!/bin/sh
find "$1" -type f -exec grep -q -wF -e "$LOGNAME" {} ';' -print

Относится к этой последней части:

10
27.01.2020, 20:24

Простейшее решение:

#!/bin/bash
username=$(whoami)
grep $username $1

Вы можете предоставить grep имя файла в качестве необязательного параметра (см.man grep). Переменная $1относится к первому позиционному параметру скрипта.

Вы называете это следующим образом:

name-finder.sh filename

Можно сделать даже один -вкладыш:

username=$(whoami); grep $username $1

Или

grep $(whoami) $1
1
27.01.2020, 20:24

Теги

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