Bash ограничил Shell с помощью rbash

#!/usr/bin/awk -f

BEGIN { FS = "\t"; OFS = "," }
{
    for(i = 1; i <= NF; i++) {
        if ($i + 0 == $i) { $i = "=" $i }
        else gsub(/"/, "\"\"", $i);
        $i = "\"" $i "\""
    }
    print
}

Принятие Вас называет это convert.awk, можно или звонить с также

ec2-describe-snapshots -H --hide-tags | awk -f convert.awk > snapshots.csv

или (после того, как добавление выполняет полномочия, chmod a+x convert.awk)

ec2-describe-snapshots -H --hide-tags | ./convert.awk > snapshots.csv

Это сделает новый столбец для каждой вкладки, которая будет держать столбец комментария вместе (если это не будет содержать вкладки), но добавьте пустые столбцы (хотя, именно так Ваш образец производил взгляды, поэтому возможно, Вы на самом деле хотите это). Если Вы захотите разделить на всем пробеле (то это свернет дополнительные вкладки в таблице, но поместит каждое слово в описание как новый столбец), выньте FS="\t"; оператор.

Для будущих поколений, если Вам не нужно "s или =s или встроенный пробел, можно сделать это остротой:

awk -v OFS=, '{$1=$1;print}'
2
26.12.2012, 00:12
1 ответ

Не делайте этого. rbash должен только использоваться в уже безопасной среде, если Вы не знаете то, что Вы делаете. Существует много способов вспыхнуть ограниченная оболочка удара, которые не легко предсказать заранее.

Функции могут легко быть переопределены просто путем выполнения command bash или command sh.

Что касается Ваших вопросов:

  • Вы не можете определить несколько функций одновременно непосредственно. Необходимо было бы сделать что-то вроде этого:
x()  { foo; }
alias f1=x
alias f2=x
  • rbash работы, потому что bash проверяет значение argv[0] на запуске. Если базовое имя, с продвижением разделенных тире, равно RESTRICTED_SHELL_NAME (принимающий значение по умолчанию к rbash, посмотрите config.h), это работает в ограниченном режиме. Это - тот же способ, которым это работает в режиме соответствия POSIX, если вызвано как sh. Вы видите это в следующем коде от shell.c в ударе 4.2, строки 1132-1147:
/* Return 1 if the shell should be a restricted one based on NAME or the
   value of `restricted'.  Don't actually do anything, just return a
   boolean value. */
int
shell_is_restricted (name)
     char *name;
{
  char *temp;

  if (restricted)
    return 1;
  temp = base_pathname (name);
  if (*temp == '-')
    temp++;
  return (STREQ (temp, RESTRICTED_SHELL_NAME));
}
6
27.01.2020, 21:55
  • 1
    @ChrisDown я делаю правильно, чтобы избежать удара, sh, чтобы управлять или являюсь там каким-либо альтернативным путем? –  Rahul Patil 25.12.2012, 17:08
  • 2
    @RahulPatil нет, Ваш метод легко обходится. Используйте chroot. –  Chris Down 25.12.2012, 17:18

Теги

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