Передача аргумента Bash -c для поиска

Вы можете сделать протокол полученным из любого типа класса, такого как NSObject или AnyObject. например:

protocol TopNewsTableDelegate  : AnyObject{
  func topNewsTableDidLoadedStories()
}
0
задан Greg 15 January 2019 в 21:44
поделиться

2 ответа

Ну, предложения от работы Франческо. Но я все еще смущен поведением здесь. Мы знаем, что использование в кавычках групповых символов без кавычек обычно приводит к ошибке. То есть:

find . -name *.txt -print

find: пути должны предшествовать выражению: HowTo-Word-Split.txt' find: possible unquoted pattern after predicate -name '?

Однако, подстановочный знак в одинарных кавычках (или экранирование это, если это только 1 символ) будет работать так:

find . -name \*.txt -print

, который дает этот вывод (на две отдельные строки)

> ./HowTo-Word-Split.txt    
> ./bash-parms.txt    

Так что в версии bash -c то, что я Я думал, что это:

bash -c 'find . [113] $1 -print' "-name" "*.txt"

приведет к тому, что * .txt будет расширен даже перед передачей в строку cmd, а использование одинарных кавычек приведет к попытке выполнения (после подстановки arg и -c вступает в силу)

find . -name *.txt -print

, который, как я только что продемонстрировал, не работает.

Однако, похоже, существует некоторая магия, связанная с ключом -c, как показано настройкой -x в приглашении bash, например:

$ set -x
$ bash -c ' find . [115] "$1" -print' "-name" "*.txt"

+ bash -c ' find . [115] "$1" -print' -name '*.txt'
./HowTo-Word-Split.txt
./bash-parms.txt

Обратите внимание, что хотя я использовал двойные кавычки в строка -c, bash фактически выполняла поиск с одинарными кавычками, заключенными в аргумент, тем самым заставляя поиск работать.

Проблема решена. :)

0
ответ дан Greg 15 January 2019 в 21:44
поделиться

Похоже, вы пытаетесь использовать "\*.txt" для предотвращения расширения глобуса, так что команда find видит *.txt вместо, например, foo.txt.

Однако, в конечном итоге он видит \*.txt. Нет файлов, соответствующих этому шаблону, поэтому вы не видите выходных данных.

Чтобы find видел *.txt в качестве 3-го аргумента, вы можете сделать это:

bash -c 'find . [110] "$1" -print' "-name" "*.txt"

Редактировать: Вы действительно получаете . -name *.txt -print в качестве вывода первой команды, которую вы заменили find с echo? Когда я запускаю эту команду, я получаю . -name \*.txt -print.

0
ответ дан Mike Holt 15 January 2019 в 21:44
поделиться
Другие вопросы по тегам:

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