bash-скрипт для построения команды find, содержащей "\ n" - PullRequest
0 голосов
/ 08 ноября 2019

У меня возникла проблема с созданием команды find в bash-скрипте, который содержит \ n

Вот команда, которую я хочу собрать

 find ./201911 -printf "%f\n">201911filelist.txt

Когда я тестирую командувсе выглядит нормально, но когда я помещаю это в скрипт, эхо обрабатывает \ n как новую строку. Я пытался избежать этого, но он не работает

# echo "find ./$dir -printf \"%f""\n"\"">${dir}filelist.txt"""
find ./201911 -printf "%f\n">201911filelist.txt

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

 echo "find ./$dir -printf \"%f""\n"\"">${dir}filelist.txt""" >> create_script_$dir.sh

результат в файле такой:

find ./201909 -printf "%f
">201909filelist.txt

Если попробовал это тоже

  /bin/echo -e "find ./$dir -printf \""%f\\" "n\""> ${dir}201911filelist.txt"

Что приводит к приведенному ниже, но мне нужно избавиться от места:

find ./201911 -printf "%f\ n"> 201911201911filelist.txt

Я что-то здесь упускаю, но я 'м очень близко ...

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Во-первых, генерация кода в bash предназначена только для экспертов и несет в себе серьезные угрозы безопасности. Подумайте о том, чтобы найти другой способ удовлетворить ваши потребности.

При этом следующие действия ведут себя как и предполагалось:

#!/usr/bin/env bash

checkShellCompat() {
  [ -n "$BASH_VERSION" ] && return
  echo "ERROR: Must run this script with bash, not sh" >&2
  exit 1
}

buildFindCmds() {
  # generate a correct shebang, and run the shell compatibility check
  printf '%s\n' '#!/usr/bin/env bash' "$(declare -f checkShellCompat)" checkShellCompat
  # ...then, for each directory, generate a find command with a correct redirection
  for dir; do
    printf '%q ' find "./$dir" -printf '%f\n'
    printf '>%q\n' "${dir}filelist.txt"
  done
}
buildFindCmds 201911 201912
0 голосов
/ 08 ноября 2019

Если вы хотите записать определенные команды, вы можете использовать bash 'set -x', 'set + x'.

set -x
 find ./201911 -printf "%f\n">201911filelist.txt
 .. additional command
set +x

Или обернуть это в функциюразличные расширения eval - см. комментарии ниже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...