The letters `acdeijstuADST' select the new attributes for the files: append only (a), compressed (c), no dump (d), extent format (e), immutable (i), data journalling (j), secure deletion (s), no tail-merg‐ ing (t), undeletable (u), no atime updates (A), synchronous directory updates (D), synchronous updates (S), and top of directory hierarchy (T).
из страницы справочника для
chattr
Файлы с этим флагом не будут открыты для записи. Это также блоки определенные потенциально разрушительные системные вызовы такой как
truncate()
илиunlink()
.$ touch foo $ chattr +a foo $ python > file("foo", "w") #attempt to open for writing [Errno 1] Operation not permitted: 'foo' > quit() $ truncate foo --size 0 truncate: cannot open `foo' for writing: Operation not permitted $ echo "Appending works fine." >> foo $ cat foo Appending works fine. $ rm foo rm: cannot remove `foo': Operation not permitted $ chattr -a foo $ rm foo
Эта опция разработана для файлов журнала.
Нет, это не возможно.
Причина состоит в том, что оболочка читает в блоках файла, поскольку это выполняет его, и блок мог бы содержать код оболочки, который Вы хотите выполнить в другой оболочке, но с тех пор ее уже считанный первой оболочкой, второй наклон оболочки считал его, если это должно было принять выполнение сценария. (Это могло работать, если бы оболочка имела способность к lseek()
файл, но языки оболочки просто не усовершенствованный),
Однако существует грязный способ сделать это; zsh.
zsh назвали команду emulate
который позволяет Вам переключить языки оболочки на лету. Но использование zsh только для эмуляции tcsh и удара просто грязно, не говоря уже о чрезмерно сложном.
.
Также я не сказал бы, что удар более современен. Это более широко распространено уверенный, но это принимает функции в очень медленном темпе. Bash более фокусируется на совместимости, чем что-нибудь.
Я не рекомендовал бы смешать и соответствовать типам оболочки в рамках сценария.
Я сказал бы, что Ваш лучший выбор будет состоять в том, чтобы скопировать известный сценарий и изменить оболочку вызова и затем видеть, какие повреждения, таким образом, Вы знаете, где различия в синтаксисе, это должно быть разработано.
Но, короче говоря, попытка к смешиванию и подгонке в рамках сценария просто походит на плохую идею. (лично)
Я соглашаюсь с другими ответами, что это обычно не прекрасная идея.
Но можно вызвать оболочку из сценария. Если Вам записали сценарий в настоящее время для использования tcsh, и Вы хотите использовать несколько определенных для удара функций, можно вызвать удар явно. Например, удар делает намного легче перенаправить stdout и stderr независимо.
#!/bin/tcsh -f
echo Hello, tcsh
bash -c 'echo Hello, bash 1>&2' # writes to stderr
echo Good-bye, tcsh
В конечном счете, тем не менее, вероятно, лучше перевести весь сценарий для использования удара.
Обязательная ссылка: http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/