Есть ли для удара что-то как жемчуг __ ДАННЫЕ __?

Есть ли для удара что-то как жемчуг __DATA__? Я имею в виду функцию, что код после __DATA__ не будет выполняться.

12
задан Logan Capaldo 13 August 2010 в 13:27
поделиться

2 ответа

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

# Some shell code...

exit

[data (possibly binary) goes here]

Чтобы на самом деле прочитать эти данные из вашего скрипта, вы можете использовать некоторую магию sed, чтобы извлечь все после первой строки, содержащей только __ DATA __ , затем сохранить вывод этого sed в переменной. Вот пример:

#!/bin/sh

data=$(sed '0,/^__DATA__$/d' "$0")
printf '%s\n' "$data"

exit

__DATA__
FOO BAR BAZ
LLAMA DUCK COW

Если вы сохраните этот сценарий как test-data.sh и сделаете его исполняемым, вы можете запустить его и получить следующий результат:

$ ./test-data.sh
FOO BAR BAZ
LLAMA DUCK COW
18
ответ дан 2 December 2019 в 07:20
поделиться

Прежде всего, прагма perl "__DATA__" - это способ передачи входных данных в $_ без указания файла. В bash нет эквивалента, поскольку у него нет ничего похожего на $_. Однако вы можете предоставлять данные непосредственно в сценарии bash другими способами, такими как явное задание переменных, использование HERE docs и т.д.

Однако я не уверен, что это то, что вы хотите сделать. Похоже, вам нужен какой-то метод комментирования блоков. Так ли это?

3
ответ дан 2 December 2019 в 07:20
поделиться