Наиболее эффективный способ, не делайте этого! Если Вы делаете, в любом случае, Вам нужно дважды 'большое' пространство на диске, и Вы тратите впустую iOS.
Если Вы застреваете с большим файлом, который Вы хотите считать без 1-й строки, ожидать, пока Вы не должны читать ее для удаления 1-й строки. Если необходимо отправить файл от stdin до программы, используйте хвост, чтобы сделать это:
tail -n +2 | your_program
Когда необходимо считать файл, можно воспользоваться возможностью для удаления 1-й строки, но только если у Вас есть необходимое пространство на диске:
tail -n +2 | tee large_file2 | your_program
Если Вы не можете читать из stdin, используйте FIFO:
mkfifo large_file_wo_1st_line
tail -n +2 large_file > large_file_wo_1st_line&
your_program -i large_file_wo_1st_line
из еще лучше при использовании удара используйте в своих интересах замену процесса:
your_program -i <(tail -n +2 large_file)
Если Вам нужен поиск в файле, я не вижу лучшего решения, чем не застревание с файлом во-первых. Если этот файл был сгенерирован stdout:
large_file_generator | tail -n +2 > large_file
Еще, всегда существует решение для замены FIFO или процесса:
mkfifo large_file_with_1st_file
large_file_generator -o large_file_with_1st_file&
tail -n +2 large_file_with_1st_file > large_file_wo_1st_file
large_file_generator -o >(tail -n 2+ > large_file_wo_1st_file)
Файловые системы часто монтируются noexec,nosuid
по умолчанию повысить безопасность немного. Следовательно даже при том, что Вы видите, что исполняемый файл обдумал набор файла, ядро откажется выполнять его. Путем вызова его в форме interpreter path/to/script
Вы запрашиваете систему работать interpreter
, который в свою очередь получает path/to/script
как аргумент и синтаксические анализы это таким образом обход файловой системы ввел ограничение (Вы смогли достигать того же эффекта со скомпилированными исполняемыми файлами с: /lib/ld-linux.so.1 path/to/executable
).
Следовательно одна опция mount -o exec ...
. Вы могли бы хотеть поместить опцию в /etc/fstab
- обычно путем замены defaults
опция с defaults,exec
. Однако, если Вы действительно не знаете то, что Вы делаете, я отговорил бы от этого.
Что касается специфических особенностей Bash, я верю bash
интерпретирует тех, которые, работая как sh
. И Вы определенно свободны вызвать его как bash path/to/script
.
Это немного поздно к игре, но я нашел этот поиск ответа на мою проблему и думал, что вмешаюсь для других, ищущих. Наш сценарий оболочки был записан к CD из Windows PC и когда-то смонтировался в поле Redhat, появился как rw-rw-r--
. Мое решение состояло в том, чтобы поместить файл на сервер CM Redhat, сделать его r-xr-xr-x
, и запишите его к CD от поля Redhat. Те полномочия появились то же, когда-то смонтированное на целевом компьютере, таким образом, я мог работать только с /mnt/cdrom/install.sh