Después de establecer la conexión serial, debe ejecutar resize
en esa sesión. (Además, vuelva a llamar a resize
después de cada cambio de geometría.)
Este comando detecta automáticamente la geometría correcta del terminal y notifica al shell al respecto.
En Fedora, el comando está empaquetado como xterm-resize
pero no depende de X11.
set -- cat "a b"
"$@"
Это запустит cat
с одним аргументом a b
. Расширение "$@"
(, включая двойные кавычки! )будет списком индивидуально цитируемых позиционных параметров. Позиционные параметры устанавливаются с помощью set
.
Однако включение имени команды в сам список является редкостью. Было бы чаще видеть
set -- "a b"
cat "$@"
или, если вы хотите сохранить фактическую переменную имени команды,
cmd=cat
set -- "a b"
"$cmd" "$@"
Если вы в -между установкой операндов имени файла и запуском команды хотите добавить в команду больше имен файлов или параметров, просто измените$@
:
cmd=cat
set -- "a b"
# later (adding more files to the end):
set -- "$@" "more files" "some glob here-"[0-9]
# later (adding an option at the front):
set -- -v "$@"
"$cmd" "$@"
Обратите внимание, что будет сложно добавить в начало $@
, если имя команды уже есть. В этом случае вам придется временно shift
имя команды отключить от $@
в отдельную переменную, добавить то, что вы хотите добавить, а затем снова добавить имя команды:
cmd=$1
shift
set -- "$cmd" -v "$@"
Обычно мы хотим использовать set --
, а не просто set
, чтобы установить позиционные параметры. --
запрещает синтаксическому анализатору параметров командной строки обнаруживать параметры командной строки после этой точки в списке аргументов командной строки. Обратите внимание, что без --
было бы невозможно добавить строку -v
перед $@
с set
, поскольку set -v
делает что-то совсем другое.
Связанные:
Когда вы используете echo $cmd
или $cmd
без кавычек, split+glob вызывается для содержимого $cmd
. Это не имеет ничего общего с тем, что происходит, когда вы выполняете echo cat a b
, где интерпретация синтаксиса оболочки разделяет cat
, a
и b
на разные аргументы для перехода к echo
.
Разделенная часть команды split+glob выполняется на основе содержимого $IFS
, которое по умолчанию содержит SPC, поэтому слова, полученные в результате этого разделения, никогда не могут содержать SPC. Вам нужно будет использовать другой разделитель:
IFS=: # split on :
set -o noglob # disable glob part
cmd='cat:a b'
printf '<%s>\n' $cmd # split+glob
$cmd # split+glob
В качестве альтернативы, вместо того, чтобы полагаться на split+glob, вы могли бы cmd
содержать код командной строки оболочки (на языке оболочки )и вызывать eval
для интерпретации этого кода:
cmd='cat "a b"'
eval "$cmd" # note the quotes to disable split+glob