Как отправить ctrl+a+c на отдельный экран, чтобы создать вложенное окно?

Если вы хотите, чтобы переменная хранила более одного аргумента, используйте массив:

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*/*'
)
0
20.04.2021, 23:52
1 ответ

Я не уверен, что вы можете использовать stuffкоманды, чтобы экранировать себя, но вы можете просто использовать -X, чтобы дать команду создать новое окно. Это будет командаscreen.

screen -S foo -d -m
screen -S foo -X screen -t "another window"
1
28.04.2021, 22:51

Теги

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