Псевдонимы, созданные в терминале, не отображаются в tmux. Почему?

Не видя кода, это предположение, но...

Программа, выполняющая чтение, вероятно, имеет код, который пытается читать из стандартного ввода с большим количеством эквивалентов блоков try/catch (C #-на основе псевдо-кода -):

string memoryLocationToDisplay;
while(true) {
  try {
    Console.Write("Give me data to dump: ")
    string input = Console.ReadLine();
    if (IsValidMemoryLocation(input)) {
      memoryLocationToDisplay = input;
    }
  catch {}
  PrintMemoryLocation(memoryLocationToDisplay)

  try {
    Console.Write("Dump again (y/n): ")
    if Console.ReadLine().ToLower() == "n" {
      exit;
    }
  } catch {}
}

Однако единственным символом, который программа считывает, является ^d (Конец файла ), что функционально приводит к бесконечному циклу с вечной печатью одной и той же ячейки памяти.

Это ошибка в программе, выполняющей чтение.но это, вероятно, достаточно легко обойти:

printf "A\nn\n" |./program

будет напечатан бит printf

A<newline>
n<newline>

который затем проходит через программу, так что теперь она видит 'n' и новую строку, так что она должна завершиться.

0
23.09.2019, 21:55
1 ответ

tmux— это просто программа, которая запускает другие программы, поэтому tmuxна самом деле не имеет к этому никакого отношения, кроме того, что она запускает для вас новую bashсессию. Проверьте это :Выполните alias t='echo hi'в терминале, затем запустите команду bash, чтобы запустить новую оболочку (в том же терминале ). Новый псевдоним tнедоступен в новой оболочке. Псевдонимы не наследуются. Наследуются только переменные среды (и некоторые другие вещи, например текущий каталог ).

Короче говоря,псевдонимы не наследуются оболочками, запущенными с помощью tmux. Вам нужно будет создавать экземпляры псевдонимов в каждой tmuxпанели (, возможно, путем добавления определений псевдонимов в ваш ~/.bashrcфайл ).

1
28.01.2020, 02:39

Теги

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