Я просто переустановил, и все работает. Это более ясно.
Вы не можете использовать выход из этого пути. Можно использовать кавычки или обратные косые черты для чего-то, что понимает их как парсинг оболочки.
Нет ничего для выхода из разделения слова, сделанного на переменную замену расширения или команды (который отличается от парсинга оболочки (маркирование) командной строки).
То, что можно сделать, любой изменить внутренний разделитель полей $IFS
разделить на символах новой строки только (но отметить это кроме с zsh
, также необходимо отключить поколение имени файла (хотя не для расширения *.jpg
очевидно), который является другой вещью, сделанной на неупомянутую замену команды, если Вы не можете гарантировать, что никакое имя файла не содержит globbing символы):
set -f # disable filename generation
IFS='
' # set IFS to newline character
IFS=$'\n' # alternative for ksh/zsh/bash
gm convert $(set +f; ls -v ./*.jpg) out.pdf # you also need ./ in case file
# names start with -
(который предполагает, что ни одни из имен файлов не содержат символы новой строки),
set -f
в zsh
(если в sh/ksh эмуляции), отключает чтение rc
файлы (думают zsh -f
, csh -f
), который не имеет никакого эффекта, после того как оболочка уже запускается, так безопасно.
С zsh
, можно сократить это к:
gm convert ${(f)"$(ls -v ./*.jpg)"} out.pdf
(f)
короткий для (ps:\n:)
должен разделить на символах новой строки.
С другой стороны, Вы могли использовать ls
заключение в кавычки для создания командной строки оболочки (окружают код в синтаксисе оболочки, если Вам нравится) передать eval
который позволил бы оболочке оценить его и выполнить его:
С ksh93
, zsh
или bash
:
eval "images=($(ls --quoting-style=shell -v ./*.jpg))"
gm convert "${images[@]}" out.pdf
Но с zsh
, Вы могли просто сделать:
gm convert ./*.jpg(n) out.pdf
(n)
globbing спецификатор, который говорит оболочке сортировать сгенерированные имена файлов численно.
echo gm convert `ls -Qv *.jpg` out.pdf
и или перенаправьте его в файл или скопируйте и вставьте вывод. – aditsu 13.03.2013, 09:30ls
иecho
(какeval
сделал бы также), связывает их с одним пространством (вместо того, что вызвало разделение во-первых). Также-Q
не стиль заключения в кавычки записи для оболочки (см., например, файлы с$
или`
или новая строка на их имя) иecho
разворачивает последовательности обратной косой черты. – Stéphane Chazelas 13.03.2013, 09:39set -f;echo *.jpg
и это все еще перечислило все файлы. Или я должен использовать его в сценарии? – aditsu 13.03.2013, 10:00