Частина причини, чому те, що ти робиш, не спрацює, це те, що (shell)фактично запускає нову неповноцінну оболонку, яка може бути, а може і не бути цільовою метою (insert-string); у будь-якому випадку, найбільше це можна зробити - це вийти з нижньої оболонки. У вікі Emacs є питання без відповіді на цю тему, яке порівняно рідко зустрічається з будь-якої теми; між цим, і загальною незацікавленістю, яку виявляє Emacs, що не працює в пакетному режимі, будь-якими способами спілкуватися зі своїм батьківським процесом, я схиляюся до сумнівів у тому, що ви намагаєтесь зробити.
Це, однак, не означає, що ви не можете отримати бажаного результату - адже Emacs не повинен спілкуватися з його батьківським процесом; якщо ви заміните процес оболонки на Emacs, то будь-який термінал, який ви використовуєте, буде виходити в той же час, що і Emacs, таким же чином, як і будь-який термінал, коли процес, приєднаний до його pty, закінчиться.
Метод змінюватиметься залежно від вашої оболонки, але в Bash, zsh і, ймовірно, також tcsh (також, якщо хтось все ще використовує), вам потрібно просто передмовити виклик Emacs exec- якщо ви зазвичай говорите emacs -nw, замість цього скажіть exec emacs -nw, & c.
Це передбачає, що ви викликаєте Emacs безпосередньо з оболонки, як це здається ймовірним. Якщо ви (наприклад) використовуєте скрипт оболонки для виклику Emacs, це не спрацює, тому що execзамінить процес оболонки, що виконує сценарій, а не той, який пов'язаний з вашим pty; у такому випадку просто execсценарій оболонки, і ви все одно отримаєте результат, якого ви шукаєте, якщо тільки ваш сценарій не зробить щось по-справжньому дивно, і в цьому випадку ви повинні оновити своє запитання, щоб включити його, і хтось, ймовірно, зможе щось розібратися це спрацює.