Вы выбрали непростого персонажа. Например, если бы вы попробовали Control-P , это было бы немного проще, т.е. (используя bindkey
не bind
):
bindkey ^p detach
, и он работал. Вы можете попробовать то же самое с ^ q
, и это, вероятно, не сработает. Проблема в том, что Control-Q также используется вашим терминалом для управления потоком (xon / xoff). Поскольку вас, вероятно, не интересует управление потоком, вы можете отключить его на своем tty с помощью команды оболочки
stty -ixon
, а затем Control-Q должен работать.
Это источник. Разница между выполнением и поиском объясняется в этом посте. Важным отличием здесь является то, что при выборе источника команды в исходном файле выполняются в текущей оболочке. Это означает, что любые переменные, определенные в файле, теперь будут доступны в оболочке. Чтобы проиллюстрировать разницу, попробуйте следующее:
$ cat foo ## a simple file with a variable definition
var="hello"
$ chmod +x foo ## make file executable
$ ./foo ## execute
$ echo "$var" ## var is not set in the parent shell
$ . foo ## source
$ echo "$var" ## var is now set in the parent shell
hello
Таким образом, поскольку /etc/profile
должен иметь возможность воздействовать на оболочку, из которой он был прочитан, он получен и не выполняется. .
Источником этих файлов является оболочка.
Выполнение этого в дочернем процессе означало бы, что оболочка не будет иметь переменные и т. д., установленные в своей собственной среде, поскольку они были бы установлены в среде дочернего процесса (это отдельные). Дочерний процесс не может передавать свою среду родительскому процессу.
См. также: Как сделать переменную из подоболочки доступной в родительской оболочке