Как я предотвращаю расширение, когда я использую шаблон в качестве аргумента сценарию?

Вы могли переписать свой код как это:

#!/bin/bash
function try {
    "$@"
    code=$?
    if [ $code -ne 0 ]
    then
        echo "$1 did not work: exit status $code"
        exit 1
    fi
}

try mkdir -p some/path
try cd some/path
try run_some_command

Если Вы не должны на самом деле регистрировать код ошибки, но просто успешно выполнилась ли команда или нет, можно сократиться try() далее как так:

function try {
    if ! "$@"
    then
        echo "$1 did not work"
        exit 1
    fi
}
2
03.03.2011, 16:06
2 ответа

Так как оболочка выполняет расширение шарика, прежде чем аргументы будут переданы команде, нет никакого способа, которым я могу думать, чтобы сделать это прозрачно: этим или управляет пользователь (заключите параметр в кавычки), или "в лоб" (отключают globbing полностью для Вашей оболочки с set -o noglob).

Вы смотрите на проблему от неправильного конца. Измените свой сценарий для принятия нескольких аргументов имени файла:

x=$1
y=$2
shift 2
mogrify -resize ${x}x${y}^ -gravity center -crop ${x}x${y}+0+0 "$@"
7
27.01.2020, 21:51
  • 1
    После того, как некоторые думали, что я пришел к этому заключению, но я не мог найти, как указать "остальную часть аргументов после первых двух", я просто отсутствовал shift :) –  Matteo Riva 03.03.2011, 16:59
  • 2
    Для записи можно отключить globbing для определенного сценария оболочки, выполняемого путем простого добавления set -o noglob в начале сценария. Это позволит передать аргументы без расширения. –  Mahn 22.04.2016, 20:37

Вы попробовали

cropresize.sh 110 110 \*.png

Но я могу только видеть, zsh (не колотят), расширение, это как Вы говорит.

1
27.01.2020, 21:51
  • 1
    Хорошо я могу даже включить аргумент в одинарные кавычки как '*.png' но я действительно хотел бы, чтобы это было абсолютно прозрачно, как будто это была встроенная команда –  Matteo Riva 03.03.2011, 16:31
  • 2
    Вы используете удар или некоторую другую оболочку? Поскольку в ударе, что Вы спрашиваете работы, но в zsh (который я использую), даже echo *.png попытки, расширяющиеся до всех png файлов. –  ryuslash 03.03.2011, 16:40

Теги

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