Если вы хотите, чтобы переменная хранила более одного аргумента, используйте массив:
find_args=(-type f \( -iname \*.m -o -iname \*.swift \) -print)
cmd_output=$(
find "$PROJECT_PATH" ! -path '*/Pods/*' "${find_args[@]}"
find. -path '*/Pods/MyProject*/*' "${find_args[@]}"
)
Я тоже
-not
на стандартный!
(-iname
— еще один не -стандартный предикат ). $(...)
вместо старой устаревшей `...`
. -print0
на -print
, поскольку переменные bash
не могут хранить байты NUL. Другим подходом могло бы быть объявление функции:
myfind() {
find "$@" -type f \( -iname \*.m -o -iname \*.swift \) -print
}
cmd_output=$(
myfind "$PROJECT_PATH" ! -path '*/Pods/*'
myfind. -path '*/Pods/MyProject*/*'
)
Теперь вы мало что можете сделать с этой переменной $cmd_output
, так как вы не можете надежно получить список файлов с помощью -print
вместо -print0
.
В bash 4.4 или новее вы можете вместо этого использовать массив и использовать:
myfind() {
find "$@" -type f \( -iname \*.m -o -iname \*.swift \) -print0
}
readarray -td '' files < <(
myfind "$PROJECT_PATH" ! -path '*/Pods/*'
myfind. -path '*/Pods/MyProject*/*'
)
Я не уверен, что вы можете использовать stuff
команды, чтобы экранировать себя, но вы можете просто использовать -X
, чтобы дать команду создать новое окно. Это будет командаscreen
.
screen -S foo -d -m
screen -S foo -X screen -t "another window"