Как расширить столбцы, когда экспорт COLUMNS не работает

Когда вы делаете это:

check=`echo $?`

Вы заставляете оболочку расширяться $? , чтобы составить команду echo $? , а затем назначить ее вывод переменной. Если вы хотите сохранить статус возврата команды, вырежьте среднего человека и просто сделайте следующее:

check=$?

Однако в вашем случае вам не нужно сохранять статус возврата. Оператор if сам по себе может выполнить проверку && .

Итак, если вы хотите найти текстовый файл, содержащий две строки, сделайте следующее:

if grep -qwF "$Author" "BookDB.txt" && grep -qwF "$Title" "BookDB.txt"; then
    echo Yes
fi

Параметр -q предназначен для подавления вывода grep и -F - не анализировать шаблон как регулярное выражение.

Однако, что вы, скорее всего, ищете, это строка, содержащая заголовок, за которым следует имя автора, учитывая ваш пример. Итак, вы можете попробовать следующее:

if grep -q "^\\s*$Title\\s*:\\s*$Author\\s*\$" "BookDB.txt"; then
    echo yes
fi

Это потребует от пользователя ввести полное название и полное имя автора, а также правильно указать регистр.Так что, может быть, вам нужно что-то более снисходительное:

if grep -qi "$Title.*:.*$Author" "BookDB.txt"; then
    echo yes
fi

Теперь вас не волнует регистр и вам не нужны полные имена ( John и john оба соответствуют ДЖОН Кавендиш ). То же относится к названию.


Следующий MCVE

echo Title:
read Title
echo Author:
read Author
if grep -qi "$Title.*:.*$Author" "BookDB.txt"; then
    echo Found
fi

работает для следующего файла "BookDB.txt":

Название книги: AuthorName
Название книги: authorname
Название книги: Authorname
книга: authorName

с тестовым примером книга и автор .

2
30.06.2017, 23:02
1 ответ

Я бы использовал resize:, он обновляет sttyнастройки (, которые теряются при прямом подключении к встроенному устройству, а также то, что необходимо дляscreen).

resizeпредставляет собой командную -линейную утилиту (, разработанную совместно с xterm), которая проверяет фактический размер экрана -(с помощью escape-последовательностей VT100 -)и обновляет sttyдля отражения этого размера, а также команды печати, которые можно выполнить для обновления переменных среды.

Изменение $COLUMNSвнутри screenне очень эффективно, так как screen«знает», насколько велик экран терминала, и будет мешать программам, которые предполагают другой размер.

1
27.01.2020, 22:39

Теги

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