Работа с файлами в инвентаре Ansible

Нет. Очень немногие команды имеют эту функциональность, GNU awk(gawk)добавил ее совсем недавно, и даже для тех команд, у которых есть -iили эквивалент, все, что он делает, это создает временный файл в фоновом режиме.

Итак, способ сделать это:

tr -sc '[:alnum:][:punct:]' ' ' <file >newfile && mv newfile file

Если вам это нужно часто, вы можете придумать какую-нибудь функцию.:

tri(){
  tmpFile=$(mktemp)
  echo "$@"
  case $# in
    ## You've given tr options
    4)
      trOpts="$1"
      set1="$2"
      set2="$3"
      inputFile="$4"
      ;;
    ## No options, only set1 and set2 and the input file
    3)
      set1="$1"
      set2="$2"
      inputFile="$3"
     ;;
    ## Something wrong
    *)
      echo "Whaaaa?"
      exit 1
      ;;
  esac
  tr "$trOpts" "$set1" "$set2" < "$inputFile" > "$tmpFile" &&
    mv "$tmpFile" "$inputFile"
}

Затем вы запустите это как:

tri -sc '[:alnum:][:punct:]' ' ' file

Обратите внимание, что, в отличие от настоящего tr, здесь предполагается, что имя файла будет аргументом, а не перенаправленным вводом (<file), и что опции будут указываться вместе, как показано выше (, а не как-s -c).

0
28.09.2021, 18:52
1 ответ

Поскольку у меня аналогичная конфигурация, я хотел бы ответить на ваши вопросы следующим образом.

Can I.. copy a file from my Ansible inventory to a remote?

Да.

Absolute paths are no option to me.

Используйте относительные пути. Конструкции типа

- name: Copy file(s) to remote host
  copy:
    src:../iventory/group_vars/group1/upload.txt
    dest: /tmp

или

- name: Copy file(s) to remote host
  copy:
    src: "{{ item }}"
    dest: /tmp
  with_fileglob:
    - "../iventory/group_vars/group1/*.txt"

работают.

0
29.09.2021, 08:09

Теги

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