Обеспечьте два аргумента одной опции с помощью getopts

Вы не хотите останавливаться make процесс; Вы хотите остановиться make процесс и все его дочерние процессы. Я держал пари, делают, выполнялся рекурсивно.

Вы могли попробовать set -m, затем используйте %1 вместо "$subpid".

set -m включает "управление заданиями", которое выключено значением по умолчанию в сценариях. Я думаю, что это должно работать на Ваш вариант использования, хотя люди, кажется, думают, что это - плохая идея в целом.

9
26.10.2014, 04:30
1 ответ

Я имел честь слышать RMS (Ричард М. Столлман) и Линус Торвальдс. По собственным словам RMS, Линус сделал ядро и из электронной почты, которая сейчас хорошо известна на comp.unix.os newsgroup http://www.linux.com/news/software/linux-kernel/734956-linuss-famous-email должен был сделать его игрушечным проектом. Сходство между проектом ядра и проектом GNU utilities заключается в том, что оба используют производную лицензии GPL, монолитное ядро в основном является GPL2 с некоторыми частями в GPLv3, в то время как большинство проектов GNU строго GPL2.

К вопросу не относится - проект GNU имеет собственный проект ядра «Hurd», где пользователь никогда не должен касаться ядра ядра и просто касаться различных подсистем, чтобы делать все, что он/она хочет. Предполагается, что это повысит уровень безопасности и будет несколько более модульным и в настоящее время может быть реализовано с помощью виртуальной машины. Как только мы увидим это в реальных устройствах (возможно, навсегда), мы действительно узнаем, какова реальная производительность.

Я также не уверен, что Линус сделал (ядро 0.1) следует назвать OS. Обычно ОС имеет ядро, имея один или несколько компиляторов, кучу утилит и пользовательский интерфейс, который по существу является дистрибутивом GNU/Linux .

Только мои 2 пары.

-121--117281-

Параметр преобразования - размера ImageMagic имеет аргумент геометрии с мощным синтаксисом (см. ниже) для выражения желаемого отношения старых и новых размеров изображения.

Чтобы изменить размер одного размера до явного значения и изменить размер другого размера на тот же коэффициент, сохранив соотношение сторон, можно исключить одно из значений в стандартном формате 950x700 , например, 950 для указания ширины или x700 для определения высоты.

convert in.jpg -resize x700 out.jpg

должны делать то, что вам нужно.

Для получения наилучшего результата самым большим фактором должно быть повторное сжатие изображения. При выводе изображения JPEG оно сжимается в несколько ином пути, чем раньше, даже с теми же опциями сжатия и тем же программным обеспечением (в противном случае это может быть большая разница).

Значения по умолчанию для -resize действительно хороши, в отличие от многих других программных обеспечений. Лучше оставить их в покое.

Для точной настройки параметров, влияющих на шаг фильтра изменения размера, я не согласен с ответом @ peterph, я не думаю, что это поможет экспериментировать с опциями -filter и -define filter: support =... :

Вы можете сломать много вещей, в то время как трудно сказать, что изменилось.
Изменение размеров и фильтрация оптимальным путь включает в себя гораздо больше математики, чем можно было бы ожидать, поэтому, если у вас нет степени магистра математики, я бы посоветовал не изменять параметры изменения размера. (Но обратите внимание, что это может быть хорошей идеей в другом месте: я видел, как Adobe ошибается.)

Я предполагал, что речь идет о фотоснимках, снимках, сделанных физической камерой из реального мира.
Если это что-то другое, например рисование линий или 3D графическая сцена, «правильный» размер может быть не тем, что вам нужно; Для некоторых ситуаций могут быть специальные способы изменения размеров.



Синтаксис аргумента для -resize geometry , из www.imagemagick.org :

size               General description (actual behavior can vary for different options and settings)

scale%             Height and width both scaled by specified percentage.
scale-x%xscale-y%  Height and width individually scaled by specified percentages. (Only one % symbol needed.)
width              Width given, height automagically selected to preserve aspect ratio.
xheight            Height given, width automagically selected to preserve aspect ratio.
widthxheight       Maximum values of height and width given, aspect ratio preserved.
widthxheight^      Minimum values of width and height given, aspect ratio preserved.
widthxheight!      Width and height emphatically given, original aspect ratio ignored.
widthxheight>      Shrinks an image with dimension(s) larger than the corresponding width and/or height argument(s).
widthxheight<      Enlarges an image with dimension(s) smaller than the corresponding width and/or height argument(s).
area@              Resize image to have specified area in pixels. Aspect ratio is preserved.
-121--75937-

Невозможно передать два аргумента с одним параметром с помощью getopts .

Я рекомендую следующие альтернативы:

  1. Поместите цитаты вокруг нескольких аргументов

    В этом случае getopts будет рассматривать их как один аргумент, но вы сможете разделить его позже. Можно даже поместить все аргументы в массив сразу:

     # !/bin/bash
    
    пока гетопты «: hr: l:» opt; сделать
    случай $ opt в
    r) эхо «Run Numbers - argument = $ OPTARG»
    набор -f # disable glob
    IFS = '' # разделение на символы пробела
    array = ($ OPTARG);; # использовать оператор split + glb
    l) эхо «Диапазон латентности - аргумент = $ OPTARG»;;
    h) текст справки
    graceful_exit;;
    *) использование
    clean_up
    выход 1
    esac
    готово
    
    echo «Количество аргументов: $ {# array [@]}»
    echo -n «Аргументы:»
    для i в «$ {array [@]}»; сделать
    echo -n «$ {i}»,
    готово
    printf «\b\n »
    

    Пример выполнения:

     ./script -r «123 456 789»
    

    И вывод:

     Run Numbers - аргумент = 123 456 789
    Количество аргументов: 3
    Аргументы: 123, 456, 789
    
  2. В качестве разделителя используйте запятую (или другой предпочтительный символ)

     ./script -r 123 456 789
    

    и замените IFS = «» на IFS =, в приведенном выше коде. Это имеет то преимущество, что позволяет пустые элементы. Как указано в разделе комментариев, это решение выбирается некоторыми обычными программами, например lsblk -o NAME, FSTYPE, SIZE .

  3. Разрешить несколько параметров -r

    Несколько -r , но каждый из них принимает только один аргумент:

     ./script -r 123 -r 456 -r 789
    

    Затем аргументы добавляются в массив один за другим

     массив + = («$ OPTARG»)
    

    Это преимущество состоит в отсутствии ограничений на символы, которые могут содержать элементы. Этот также используется некоторыми стандартными инструментами linux, например awk -v var1 = x -v var2 = y .

18
27.01.2020, 20:05

Теги

Похожие вопросы