У меня есть рабочий скрипт bash (работающий на OSX), который принимает файлы и каталоги в качестве входных данных и делает что-то вроде
for inputFile in $@
do
[someStuff]
done
но я хочу предоставить «запасной вариант», означающий, что если скрипт запускается без аргументов (например, двойной щелчок), он может принимать данные в это время, позволяя пользователю удалять файлы непосредственно на терминале (возможно, через read
но не обязательно, я открыт для лучших / разных решений).
Я предполагаю, что я должен использовать какой-то if
заявление, но я не уверен, как. Я бы не хотел дублировать размер скрипта в два раза, повторяя [некоторые вещи] для каждого случая.
Спасибо.
read
вариант? Важно иметь возможность читать несколько файлов / каталогов, иначе это будет регрессия.if
который используетread
что я должен положить вelse
часть, которая использует аргументы, переданные через командную строку при вызове скрипта, чтобы сказать «установить каждый из аргументов $ @ в $ {altfiles [@]}»?for inputFile in "$@"
и он будет использовать либо исходные аргументы, либо те, которые будут прочитаны позже (и будут установлены с помощью `set) в зависимости от ситуации.Предполагая, что ваш план резервного копирования состоит в том, чтобы предоставить список файлов на стандартном вводе, по одному на строку, а ваш основной план - предоставить список файлов в командной строке, по одному на аргумент:
Как обычно в Unix, Ctrl-D в отдельной строке завершает стандартный ввод и позволяет программе продолжаться.
Но вы упомянули «падение», что заставляет меня думать, что вы действительно like - возможность перетаскивания. Для этого, утконос может быть что-то посмотреть. Я верю, что он объединит ваш сценарий в приложение, которое сделает для вас цель перетаскивания и передаст удаленные файлы в качестве аргументов вашему сценарию.
Обновить : Если вы хотите, чтобы файлы содержали только один старый пробел между ними, чтобы в одной строке могли находиться несколько файлов, замените этот цикл while на:
Или, если вы ожидаете только одну строку со всеми файлами на нем, вы можете упростить весь цикл while:
Имейте в виду, однако, что с этим подходом вы должен введите обратную косую черту перед любым пробелом, который вы на самом деле хотите включить в путь к файлу или каталогу, или сценарий проанализирует ваш путь как несколько отдельных файлов! (Перетаскивание из Finder в Терминал автоматически выполнит эту обратную косую черту за вас.)
источник
read
часть не работает для меня, она просто позволяет мне добавлять файлы бесконечно, ничего не делая. Кроме того, это заставит пользователя добавить файл и создать новую строку, или они могут добавить все файлы в одну строку (разделенные пробелами)?read
) и что эти приложения не могут справиться. Если только я не использую oascript для запроса этого числа, я предпочел бы сначала создать полноценный скрипт только для терминала.myscript < filenames.txt
,