Расширенные команды печати тире

Выполнение xtrace или set -x с Bash приведет к напечатайте расширенную команду:

$ bash -xc 'touch "alfa bravo"'
+ touch 'alfa bravo'

Однако Dash не печатает команду, которая фактически выполняется:

$ dash -xc 'touch "alfa bravo"'
+ touch alfa bravo

Напечатанная команда создает 2 файла, в то время как команда на самом деле создает 1. Можно ли заставить Dash печатать фактически выполняемые команды?

0
09.03.2016, 04:20
1 ответ

Это довольно ужасный обходной путь, но, похоже, он помогает:

BEGIN {
  w = "\47"
  while (++i < ARGC) {
    x = split(ARGV[i], y, w)
    for (each in y) {
      if (y[each] ~ /[^[:alnum:]%+,./:=@_-]/)
        printf w y[each] w
      else
        printf y[each]
      if (each < x)
        printf "\\" w
    }
    if (i == ARGC - 1)
      printf RS
    else
      printf FS
  }
}

Результат:

$ awk -f charlie.awk touch "alfa bravo"
touch 'alfa bravo'

$ awk -f charlie.awk touch 'alfa"bravo'
touch 'alfa"bravo'

$ awk -f charlie.awk touch "alfa'bravo"
touch alfa\'bravo
0
28.01.2020, 04:52

Теги

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