Как сгенерировать конкретную (именованную) управляющую последовательность для текущего терминала?

Вариация на тему ответа Хантера С.Томпсона:

В файле запуска оболочки:

if [ -n "$SSH_CLIENT" ]; then
   alias matlab='echo "restricted to local users only, sorry"'
   alias firefox='echo "restricted to local users only, sorry"'
fi

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

Например:/usr/local/bin/matlab:

#!/bin/sh

if [ -n "$SSH_CLIENT" ]; then
   echo 'restricted to local users only, sorry' >&2
   exit 1
fi

exec /real/path/to/matlab

Это не мешает пользователю сбрасывать свою SSH_CLIENTпеременную окружения или выполнять настоящую matlabпрограмму напрямую.

0
16.01.2020, 01:29
1 ответ

Команда, которую я видел, была tput. Можно было бы использовать его ± как в моем вопросе:

echo -n "$(tput home)"

Но, конечно, этот конкретный пример излишен; расточительно запускать стандартный вывод tputв качестве аргумента, который echoбудет записывать в свой собственный стандартный вывод. Это может иметь немного больше смысла, если вам нужно сгенерировать строку echo -n "$(tput thing1)some text$(tput thing2)other text— но, как указывает @icarus в комментарии ниже, это приведет к потере всех приемов синхронизации , о которых tputзнает.

Таким образом, утилиту лучше всего вызывать напрямую всякий раз, когда это целесообразно:

tput clear
tput blink
echo "DANGER WILL ROBINSON"
tput bel
sleep 5
reset     # NOTE: this might be symlinked to tput also!

Это не основной/встроенный -инструмент, но он предоставляется как часть ncurses и в результате должен быть широко доступен. Я нашел хорошее введение/обзор , в котором дается некоторая предыстория, а также показаны связанные команды. И этот gist содержит удобный список всех именованных «возможностей», которые могут быть выведены.

1
28.01.2020, 02:38

Теги

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