Я нашел причину, по которой это не сработало.
В конфигурации PuTTy мне пришлось изменить настройки сеанса следующим образом:
Соединение -> Данные -> Сведения о терминале -> Строка типа терминала
Значение было: xterm {{ 1}} Я изменил его на linux
Теперь я могу использовать клавиши Home + End в Bash и Screen.
echo $ TERM
покажет linux
за пределами экрана и screen.linux
внутри экрана.
ОБНОВЛЕНИЕ 23 октября 2018 г.
Я нашел гораздо более простое решение!
Просто запустите экран с помощью этой команды:
TERM = linux screen
или поместите эту строку в свой ~ / .bashrc :
alias screen = 'TERM = linux screen'
Путь к файлу задается в качестве параметра . Это означает, что он задается в командной строке скрипта. Это означает, что вы не должны интерактивно запрашивать это у пользователя.
#!/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
Относится к этой последней части:
man grep
в вашей системе. Простейшее решение:
#!/bin/bash
username=$(whoami)
grep $username $1
Вы можете предоставить grep имя файла в качестве необязательного параметра (см.man grep
). Переменная $1
относится к первому позиционному параметру скрипта.
Вы называете это следующим образом:
name-finder.sh filename
Можно сделать даже один -вкладыш:
username=$(whoami); grep $username $1
Или
grep $(whoami) $1