Я только что протестировал на vm с centos 6.7:
# parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Error: /dev/sdb: unrecognised disk label
(parted) mklabel gpt
(parted) mkpart primary 1m 100%
(parted) quit
Information: You may need to update /etc/fstab.
[root@localhost ~]# parted /dev/sdb print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 1073MB 1072MB primary
[root@localhost ~]# parted /dev/sdb "unit s print"
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 2097152s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 2048s 2095103s 2093056s primary
и вот, пожалуйста, правильно выровненный gpt-раздел.
Если вы хотите, чтобы сообщение читалось как одна строка из стандартного ввода (, введенная пользователем при использовании сценария в терминале )и затем переданная в качестве аргумента функции, вы можете:
fct1 "$(line)"
line
больше не является стандартной командой, но все еще довольно широко распространена. Вы можете заменить его на head -n1
, но в некоторых реализациях он может считывать более одной строки (, хотя выводит только одну ), когда ввод не поступает с терминального устройства.
С bash
's read
вам придется сохранить его в переменной. Вот для чего read
— хранить ввод в переменной.
IFS= read -r line && fct1 "$line"
С zsh
для read
вы можете использовать опцию -e
, которая отображает прочитанные данные вместо сохранения их в переменной, поэтому line
выше может быть записано какIFS= read -re
:
fct1 "$(IFS= read -re)"
(это менее эффективно, чем использование read
с переменной, поскольку нам нужно разветвить процесс, чтобы zsh мог прочитать вывод read
).
Конечно, вы также можете заменить свой:
local msg1=${@}
с
local msg1; IFS= read -r msg1 || return
Утилита read
не позволяет использовать обратные вызовы (Я не уверен, что какие-либо распространенные инструменты Unix позволяют ). Кроме того, она не выводит прочитанные данные.
Что вам нужно сделать, так это обернуть вызов read
функцией, которая принимает то, что предоставляет пользователь, и выводит его обратно, как вы описываете. В качестве альтернативы используйте какой-либо другой инструмент для чтения ввода и получения желаемого результата, например awk
.
Кроме того, в общем случае использование variable=$@
не совсем точно определено. Если вы хотите, чтобы аргументы командной строки представляли собой список значений, разделенных пробелами -, используйте variable="$*"
вместо (, предполагая значение по умолчанию для переменной IFS
).
Это довольно необычный запрос... хммм... чтобы получить некоторый ввод от терминала в список позиционных параметров этой функции, попробуйте
fct1 "$(cat)"
dfergerg
I say dfergerg
i repeat
I saaaaaaaaay dfergerg
Это будет продолжаться cat
до тех пор, пока вы не введете символ EOF (CTRL -D ). Убедитесь, что переменная vert
установлена на tru
вне функции.