Какая sed версия не является GNU sed 4.0?

Во-первых, примечание по легкому вводу новых строк:

Просто головы, что $() создайте новые строки полос из вывода команды так, чтобы выходные строки могли использоваться в качестве аргументов в пользу других программ. Это может вызвать неожиданное поведение. В этом случае я предполагаю, что Вы конкретно пытаетесь отправить эквивалент нажатия клавиши Enter. В то время как возврат каретки Вы отправляете с \r не будет чередоваться, существует несколько более легких способов ввести тот символ без потребности в дополнительной команде.

  1. Можно поместить регулярную новую строку в двойных кавычках

    screen -S minecraft -X stuff "stop
    "
    
  2. Или можно войти, символ в терминальной строке с помощью Ctrl+v Вводят последовательность. Это посмотрит что-то как ^M в терминале, но это - специальный символ новой строки.

    screen -S minecraft -X stuff "stop^M"
    

Во-вторых, примечание по ошибочному экранному поведению. (Объяснение и решение Gilles)

Экран имеет проблему с принятием входа к экранной сессии, которая никогда не присоединялась. При выполнении этого, это перестанет работать:

screen -d -m -S minecraft zsh
screen -S minecraft -X stuff "stop^M"
screen -r minecraft

Но если Вы выполните это, то это будет работать:

screen -d -m -S minecraft zsh
screen -r minecraft (then disconnect with Ctrl-a-d)
screen -S minecraft -X stuff "stop^M"
screen -r minecraft

Наконец, Вы могли использовать намного лучше ведущее себя tmux вместо screen.

Экран GNU много лет был фактическим оконечным мультиплексором, но он долго прекращал разрабатываться и ошибки, и причуды не становятся фиксированными. Tmux находится в процессе активного развития, включает много функций, которых не может коснуться экран, и его поведение из поля скорее более интуитивно. Кроме того, это лучше документируется. Вот то, как Вы преобразовали бы свой код:

# Start new detached tmux session with a named window pane running the java app
tmux new-session -d -n minecraft /usr/lib/java/bin/java [args]

# Send it keys to stop the mincraft server
tmux send-keys -t minecraft "stop^M"
12
09.07.2011, 23:39
2 ответа

BusyBox sed действительно не поддерживает --version. Как комментарий указывает, вывод предназначается для, настраивают сценарии, не для людей. (Это сбивает с толку людей довольно глупым способом!) Описывают это как BusyBox sed, указывающий на версию Busybox (полученный с busybox | head -n 1).

Некоторые команды BusyBox имеют дополнительные функции, и нет никакого универсального способа найти, которые были скомпилированы в. sed не имеет никого.

Что касается того, почему BusyBox sed сообщает, что это не GNU sed, точка на самом деле, что это пытается выдать за GNU sed, потому что это достаточно совместимо. Некоторые настраивают сценарии, ищут строку GNU sed version nnn, и этот путь BusyBox sed приемлем. А именно, настраивать сценарий GNU libc должен был быть “[выстрелен] в голову с симметрирующим устройством, полным битого стекла и ржавых гвоздей” (© Rob Landley).

8
27.01.2020, 19:56

Это - пользовательская версия sed, записанного для BusyBox. Я обратился бы к нему версией BusyBox, которую Вы установили, .e.g BusyBox sed v-whatever

1
27.01.2020, 19:56

Теги

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