Один момент. KSH по умолчанию не принимает клавиши со стрелками для перебора истории команд.
См. этот вопрос:
Из ответа Тима:
Для клавиш со стрелками вы можете поместить это в свой файл .kshrc [(
pdksh
иmksh
оба используют.mkshrc
, а не.kshrc
)] в вашем домашнем каталоге:
set -o emacs
alias __A=`echo "\020"` # up arrow = ^p = back a command
alias __B=`echo "\016"` # down arrow = ^n = down a command
alias __C=`echo "\006"` # right arrow = ^f = forward a character
alias __D=`echo "\002"` # left arrow = ^b = back a character
alias __H=`echo "\001"` # home = ^a = start of line
alias __Y=`echo "\005"` # end = ^e = end of line
Обратите внимание, что перед буквами слева от знака равенства есть два символа подчеркивания. В правой части равенства цель состоит в том, чтобы получить правильный управляющий символ, назначенный псевдониму. Способ, которым этот сценарий делает это, заключается в запуске команды (через обратные тики)
echo "\020"
, чтобы получить символ управления-n, назначенный на __B.
РЕДАКТИРОВАТЬ (спасибо, mirabilos): я удалил материал с обратных кавычек во время поиска. Я был введен в заблуждение этим:
Убедитесь, что ваша переменная $HISTFILE
env указывает на файл, и все готово.
У меня есть pdksh
, из справочной страницы :
ПРИМЕЧАНИЕ: если HISTFILE не установлен, файл истории не используется. Это отличается от исходной оболочки Korn, в которой используется $HOME/.sh_history; в будущем pdksh может также использовать файл истории по умолчанию.
Для mksh
это тот же:
Примечание: Если HISTFILE не установлен, файл истории не используется. Этот отличается от AT&T UNIX ksh.
Обратите внимание, что мой pdksh
и мой mksh
используют $HOME/.mkshrc
как файл .kshrc
. Опять же, вопрос о RTFM ( man ksh
), ваша реализация может использовать другую. (спасибо Кусалананде за намек на это).
Кстати, вы можете легко преобразовать историю ksh в bash_history, используя команду strings
и sed для очистки следующим образом:
strings
Ни bash, ни zsh не имеют этой функции.
Вы можете вызвать newgrp
. Это внешняя команда, запускающая новый процесс. Он запускает программу, указанную переменной среды SHELL
, без аргументов.
newgrp common <<EOS
touch alpha beta
EOS
touch belongs_to_original_group
Обратите внимание, что поскольку newgrp
запускает новую оболочку, она не наследуется от переменных оболочки исходной оболочки, а только от (экспортируемых) переменных среды. Выполненные здесь задания вступят в силу только там.
Для этого используйте команду newgrp
:
newgrp common
touch whatever
newgrp foo
Поскольку вы являетесь членом обеих групп (и, вероятно, не использовали пароль для групп), вы сможете легко переключаться. Фактически каждый вызов newgrp
создает подоболочку. Вы можете проверить, «кто» вы используете id
. Выходите ли вы из оболочки (и возобновляете работу с предыдущей группой) или создаете новую подоболочку, зависит от того, что вы хотите сделать.
В отличие от некоторых связанных команд, эта находится в POSIX :
Утилита newgrp должна создать новую среду выполнения оболочки с новой реальной и эффективной идентификацией группы.
Если рассматриваемые файлы не разбросаны по слишком большому количеству каталогов, вы даже можете автоматизировать процесс, используя тонкую функцию разрешений Unix, а именно SGID -бит для справочников.
Предположим, что каталог имеет разрешения 2775 (скажем), который равен rwxrwsr-x
и принадлежит xyz.common
. Если пользователь, который является членом группы общий
, создает файл или подкаталог в этом каталоге, то его групповое владение автоматически устанавливается на общее
.