Вот расширенный пример с использованием метода send-keys
, рекомендованного @Caleb
#!/bin/sh
tmux start-server
tmux new-session -d -n 'mywindowname'
tmux send-keys -t mywindowname 'cd notes' Enter 'vim whiteboard/tasks.md' Enter
tmux new-window -d -n 'secondwindowname' # this -d prevents focus from changing to the new window
tmux -2 attach-session -d
Это не имеет ничего общего с printf
, а имеет отношение только к аргументу, который вы привелиprintf
.
В строке -в двойных кавычках оболочка превращает \\
в \
. Таким образом, аргумент, который вы дали printf
, на самом деле является hi\n
, который, конечно, printf
затем выполняет свою собственную обработку управляющей последовательности.
В строке, заключенной в двойные -кавычки, экранирование, выполняемое оболочкой через \
, специально ограничено воздействием на символы & #x240a;, \
, `
, $
и "
. ] персонажи. Вы обнаружите, что \n
передается в printf
, как и -. Таким образом, аргумент, который вы дали printf
, на самом делеhi\n
снова .
Будьте осторожны, помещая escape-последовательности в строку формата для printf
. Только некоторые имеют определенные значения в Единой Спецификации Unix . \n
определяется,но \c
на самом деле нет, например.
В двойных кавычках \\n
— это экранированная (обратная косая черта )в кавычках, за которой следует n
. Это дается printf
, так как \n
и printf
выводят новую строку.
В двойных кавычках (по-прежнему ), \n
— это строка \n
. Опять же, printf
получает строку \n
и печатает новую строку.
В двойных кавычках обратная косая черта является специальной только перед другой обратной косой чертой, новой строкой или любым из $
, `
или "
. «Особый» означает, что он удаляет специальное значение следующего символа. Если обратная косая черта предшествует любому другому символу (n
, например ), то это просто обратная косая черта.
Это объясняется в стандарте POSIX .
Чтобы напечатать \n
в строке формата printf
, используйте printf '\\n'
или printf "\\\\n"
или используйте printf '%s' '\n'
Как правило, строка формата printf
должна быть заключена в одинарные кавычки, а любые переменные данные должны быть указаны в качестве дополнительных аргументов для вставки в строку формата.:
printf 'This is how you write a newline: %s\n' '\n'