как создать новый файл в неизменяемом каталоге

Я не поймите, что вы пытаетесь сделать. Ваш код устанавливает SPC в строку длины 1, единственный символ которой является пробелом.Это очень запутанный способ сделать это: SPC = "" будет работать так же хорошо и быть понятным.

Я не просмотрел весь ваш сценарий, но позже я обнаружил, что что-то не так: вы пишете что-то вроде «URL ^ Just $ SPCthe $ SPCmailto $ SPCURL» . Это создает строку URL ^ Just , потому что переменные $ SPCthe , $ SPCmailto и $ SPCURL не определены. Когда за расширением переменной сразу следует символ, который может быть частью имени переменной, вам необходимо указать конец имени переменной , например, заключив имя в фигурные скобки: URL ^ Просто $ {SPC} URL $ {SPC} mailto $ {SPC} . Я не понимаю, почему вы не пишете «URL ^ Просто URL mailto» .

Для кодирования небольших хеш-таблиц я предлагаю использовать два массива, один для ключей и один для значений. Таким образом, вы можете хранить произвольные строки, не опасаясь проблем с кодировкой. Вот набросок того, как могут выглядеть поиск и добавление (используя имена ключей и массивов значений в качестве параметров, оставленных в качестве упражнения):

lookup () { # $1=key; set value to the value found
  for ((i=1; i<=${#keys}; i++)); do
    if [[ ${keys[$i]} = $1 ]]; then value=${values[$i]}; return 0; fi
  done
  unset value; return 1
}
add () { # $1=key $2=value
  for ((i=1; i<=${#keys}; i++)); do
    if [[ ${keys[$i]} = $1 ]]; then values[$i]=$2; return; fi
  done
  keys[$i]=$1; values[$i]=$2
}

Более эффективный метод был бы быть для хранения каждой записи в переменной оболочки. Например, если таблица foo отображает somekey в somevalue , то установите переменную table_foo_somekey = somevalue . Вам необходимо закодировать ключи в буквенно-цифровые символы, что нетривиально (один из методов - хеширование ключей, напримерс sha1 и сохраните ключ в table_foo _ $ {sha1_of_somekey} _key и значение в table_foo _ $ {sha1_of_somekey} _key ). Если вам нужно перечислить ключи в таблице, вам нужно сохранить список отдельно.

Или, когда вам нужны вещи, выходящие за рамки возможностей простой оболочки, вы можете обратиться к более мощному инструменту. Ksh93 (не pdksh), bash 4 и zsh имеют ассоциативные массивы. Помимо этого, есть Perl, Python и прочие.

0
04.06.2018, 18:10
2 ответа

El comando

chattr -i /testdir

eliminará esta bandera. Luego creas el nuevo archivo y otra vez

chattr +i /testdir

debe configurar solo ry xdel directorio principal para el grupo y otros para evitar eliminar el directorio

0
20.08.2021, 11:17

La ​​forma de conseguir lo que necesitas es:

chattr +a /testdir

Configure los permisos en el propio directorio para que solo el propietario tenga permisos de escritura.

El interruptor ahace que los archivos se puedan crear y modificar internamente pero no eliminar.

La página manpara chattrsolo dice lo que hace apara los archivos, pero de hecho hace lo anterior cuando se usa en un directorio, como descubrí yo mismo cuando buscaba una manera de hacer lo mismo.

1
20.08.2021, 11:17

Теги

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