Проблема в том, что ваш первый аргумент - «4444». Почему?
Посмотрите на эту строку:
execlp("/usr/bin/netcat", "127.0.0.1", "4444", 0);
Первый аргумент для execlp()
- это исполняемый двоичный файл. Остальные аргументы будут формировать argv[]
-вектор, передаваемый процессу.
По соглашению, argv[0]
должно содержать имя исполняемого файла, и первый «реальный» аргумент - argv[1]
, который в вашем случае - «4444». То, что вы делаете, является эквивалентом оболочки
netcat 4444
blockquote>, и правильный вызов будет:
execlp("/usr/bin/netcat", "netcat", "127.0.0.1", "4444", 0);
Btw. использование
execlp()
имеет смысл только при вызове двоичного файла без полного пути, поскольку он ищет сам правильный путь (используя переменную окружения PATH). В противном случае следует использоватьexecl()
. Но это все равно будет работать.
Это кажется, что это должно решить Вашу проблему.
Это, кажется, работает на меня*
:
export PS1='--(\[\e[$((32-${?}))m\]\u\[\e[0m\])-(\[\e[$((32-${?}))m\]\d\[\e[0m\]|\[\e[$((32-${?}))m\]\T\[\e[0m\])--(\[\e[$((32-${?}))m\]\w\[\e[0m\] \$ '
*
хорошо, действительно export PS1='\u@\h:\w\$ '
работы для меня
Чтобы процитировать связанное сообщение, ответ заключается в добавлении \[и \] вокруг всех Ваших цветных последовательностей в Вашем объявлении PS1:
Прежде чем у меня было следующее значение для PS1:
'\e [0; 34m\h:\w [!] \$\\e [0m'
который дал мне хорошую синюю подсказку следующей формы
hostname:working-каталог [число команды] $
Однако у меня была та же переносящая строку проблема, которую Вы сделали. Фиксация должна была вставить \[и \] вокруг Escape ANSI так, чтобы оболочка знала для не включения их в вычисление обертывания строки. Это приводит к следующему значению для PS1:
'\[\e [0; 34 м \]\h:\w [!] \$\\[\e [m \]'
http://mywiki.wooledge.org/BashFAQ/053 - Я имею необычную подсказку с цветами и теперь колочу, кажется, не знает, насколько широкий мой терминал. Строки повторяются неправильно.
Между прочим; для Вашей ссылки; вот мой PS1
который похож на это:
(источник: lyndir.com)
\[$reset$bold$green\]\u@\h\[$blue\] \W \[$red\]${?/#0/\[$green\]}\$\[$reset\]
Заметьте, как я вставил все цветовые коды $parameters
сделать это более опрятным, но что еще более важно, потому что необходимо использовать tput
генерировать их. См.:
http://mywiki.wooledge.org/BashFAQ/037 - Как я могу распечатать текст в различных цветах?
Я объявляю свои цветные параметры в служебном сценарии, который получен моим ~/.bashrc
(и любые сценарии, которые я пишу), который называют bashlib
.
На заключительной ноте; поместите Ваш PS1
определение в ~/.bashrc
и не делайте export
это. Нет абсолютно никакой причины, почему необходимо добавить Ваш PS1
определение среде любого и всех процессов Вы мечете икру от своей оболочки.
Вы просто, кажется, пропускаете запуск и закрывающие скобки вокруг Ваших Escape (перед первым '\e' и после последнего 'm'):
PS1='--(\[\e[$((32-${?}))m\u\e[0m)-(\e[$((32-${?}))m\d\e[0m|\e[$((32-${?}))m\T\e[0m)--(\e[$((32-${?}))m\w\e[0m\] \$ '
Как упомянуто, PS1 var не должен быть экспортирован: только Ваша оболочка должна видеть его.