Прямо сейчас я отвечаю на это со своим ноутбуком, подключенным к монитору. Иметь мой рабочий стол расширилось, я использую xrandr
и его графический интерфейс ARandR
, они оба работающие вполне прилично.
Действительно, у меня есть сценарий, который я выполняю каждый раз, когда я регистрируюсь к своему ноутбуку, присоединяющему экран к нему:
#!/bin/sh
xrandr --output LVDS1 --mode 1280x800 --pos 0x0 --rotate normal --output VGA1 --mode 1440x900 --pos 1280x0 --rotate normal --output HDMI1 --off
Для понимания этого в первую очередь, необходимо видеть, что это ссылается три outputs
: LVDS1, который является экраном ноутбука; VGA1, который является моим внешним монитором; и HDMI1, который отключен (опция --off
прямо после него), потому что у меня нет монитора присоединенным к тому порту.
Можно получить список выводов, доступных с:
xrandr -q
После каждого output
некоторые параметры, которые устанавливают определенные функции их:
mode
: устанавливает разрешение вывода.pos
: который устанавливает положение вывода относительно верхнего левого угла составленного рабочего стола.rotate
: который устанавливает вращение, Вы хотите для вывода.У меня есть графический адаптер Intel. В случае Nvidia у них есть приложение для выбора TwinView
, например.
Ваше заключение в кавычки является неправильным. Когда Вы пишете $CMD
без кавычек, значения $CMD
разбит в “слова” в каждом пробельном ¹ последовательности (слова могут содержать любой непробельный символ включая пунктуацию), и затем каждое слово подвергается globbing (т.е. подстановочное расширение). Обратите внимание что кавычки в значении CMD
, в частности, являются нетронутыми: кавычки имеют значение в синтаксисе сценариев оболочки, но не в подстановке переменных. После этого первое слово становится названием команды для выполнения, и последующие слова являются аргументами команды.
В Вашем примере, принимая $KEYNAME
somekeyname
и $HZID
somehzid
, затем команда и аргументы:
./dnscurl.pl
--keyname
$KEYNAME
--
-X
POST
-H
"Content-Type:
text/xml;
charset=UTF-8"
--upload-file
/tmp/file.xml
https://route53.amazonaws.com/2010-10-01/hostedzone/somehzid/rrset
Отметьте это text/xml;
появляется как первый аргумент неопции; ясно сценарий Perl передает тот аргумент curl
. --
в списке аргументов не связано с Вашей проблемой.
Нет никакого способа наполнить командную строку в переменную. (Простая) переменная является неправильным инструментом для который: это содержит строку, но командная строка является списком строк (команда и ее аргументы). Можно наполнить название команды и его аргумент в переменную типа массив:
CMD=(./dnscurl.pl --keyname "$KEYNAME" --
-X POST -H "Content-Type: text/xml; charset=UTF-8"
--upload-file /tmp/file.xml
"https://route53.amazonaws.com/2010-10-01/hostedzone/$HZID/rrset")
RESULT=$("${CMD[@]}")
Странно выглядящий синтаксис "${CMD[@]}"
разворачивает переменную типа массив CMD
к списку слов в массиве. Двойные кавычки предотвращают расширение слов в массиве, и [@]
необходим по историческим причинам сказать оболочке, что Вы хотите развернуть массив.
Другим способом помнить командную строку или произвольный отрывок оболочки, для более позднего использования, является функция.
cmd () {
./dnscurl.pl --keyname "$KEYNAME" -- \
-X POST -H "Content-Type: text/xml; charset=UTF-8" \
--upload-file /tmp/file.xml \
"https://route53.amazonaws.com/2010-10-01/hostedzone/$HZID/rrset"
}
RESULT=$(cmd)
¹ более точно, согласно значению IFS
.