Добавьте это в свой ~/.bashrc
, это гарантирует, что только локальный tty
сможет запускать это программное обеспечение.
Когда пользователь входит в систему через ssh
, сервер добавляет alias
к команде, которая просто выводит «Ограничено. Может выполняться только локально».
whichtty=$( ps hotty $$ | grep pts )
if [ $? -eq 0 ]; then
alias <software_name>='echo Restricted. Can only be run locally.'
else
echo
fi
Сеанс SSH будет осуществляться на псевдо-подчиненном терминале (pts
), как показано в столбце TTY
, но не все соединения pts
являются сеансами SSH
. Например, программы, которые создают терминальное устройство псевдо -, такое как xterm
или screen
, будут отображаться как pts
. Таким образом, недостатком этого скрипта является то, что вы не можете запустить это программное обеспечение из своего локального xterm
или screen
.
Вам придется запускать программное обеспечение из панели запуска.
zcompile
— это встроенная оболочка zsh
, доступная только внутри оболочки, find
— отдельная команда из оболочки, поэтому она не может работать.
zsh
шарики могут легко заменить find
здесь:
set -o extendedglob # for ^, best in ~/.zshrc
for file (./**/^*.zwc(N.)) zcompile $file
(здесь опущены скрытые файлы и файлы в скрытых каталогах, что, вероятно, предпочтительнее; если нет, добавьте квалификатор D
glob ).
Если вы хотите использовать find
, вам нужно, чтобы find
выводил список, а оболочка извлекала этот список, чтобы передать его встроенной zcompile
. Что-то вроде:
find. ! -name "*.zwc" -type f -print0 |
while IFS= read -rd '' file; do
zcompile $file
done
Или вам нужно find
запустить оболочку zsh
для запуска ее zcompile
на найденных файлах:
find. ! -name "*.zwc" -type f -exec zsh -c '
for file do
zcompile $file
done' zsh {} +
(обратите внимание, что некоторые find
реализации (, включая GNU find
), имеют ограничение, которого нет у zsh
глобусов, заключающееся в том, что их *
не будут соответствовать последовательности байтов, которые не образуют допустимых символов. в текущей локали ).