Как иметь сценарий оболочки, который распаковывает несколько файлов при выполнении?

Я хотел бы иметь несколько текстовых файлов в моем файле сценария оболочки, которые распаковываются в каталог после выполнения сценария. Я обходился решениями «здесь-док», которые выглядят так:

cat>myTextFile.txt<<'EOF'
My Content
EOF

Однако мои сценарии оболочки становятся все больше и начинают требовать распаковки все большего количества файлов. По сути, я создаю вычислительный конвейер и хочу распространять его как один сценарий оболочки, но после запуска его необходимо развернуть на несколько каталогов/подкаталогов/файлов.

Спасибо!


person jake9115    schedule 09.05.2013    source источник
comment
Это нормально распространять tarball и просить пользователя распаковать его. Это вариант для вас?   -  person glenn jackman    schedule 09.05.2013
comment
@glenn, спасибо за рекомендацию. Просто чтобы посмотреть, возможно ли это, я хотел иметь один файл, который можно было бы выполнить для распаковки, и иметь все файлы на месте для конвейера без использования tar.   -  person jake9115    schedule 10.05.2013
comment
Кажется, вы в какой-то степени переопределяете команду shar (хотя похоже, что ваш скрипт делает больше, чем просто распаковывает несколько файлов).   -  person chepner    schedule 10.05.2013
comment
Я никогда не слышал о shar, но мне очень интересно. На справочную страницу!   -  person jake9115    schedule 10.05.2013


Ответы (3)


Вы можете встроить в свой скрипт tar-файл в кодировке uuencoded и распаковать его следующим образом:

tar xf - <<EOF
The uuencoded tarball
EOF

Вы можете кодировать данные следующим образом:

$ tar cf - src_tree | compress | uuencode src_tree.tar.Z >your_here_doc

затем вставьте файл your_here_doc, где сейчас строка 'The uuencoded tarball', примерно так:

$ (echo tar cf - '<<EOF'; cat your_here_doc; echo EOF) >self_expanding_files.sh
person piokuc    schedule 09.05.2013
comment
Мне нравится эта идея и посмотреть, как она распаковывается, но как мне встроить незакодированный файл tar? - person jake9115; 10.05.2013

Как насчет создания tar-архива, а затем добавления его в качестве двоичной полезной нагрузки в ваш скрипт. Действительно хорошее руководство можно найти здесь: http://www.linuxjournal.com/content/add-binary-payload-your-shell-scripts

Другие варианты включают такие скрипты, как makeself, которые делают всю работу за вас, упрощая автоматизацию сборки.

person Gus E    schedule 09.05.2013

Можете ли вы использовать комбинацию команд find и cp? Что-то вроде этого

find /path/to/your/files -exec cp {} /destination/path \;

person Always Asking    schedule 09.05.2013
comment
Спасибо за предложение... Я бы предпочел, чтобы файлы каким-то образом инкапсулировались в сценарий bash, так как его нужно распространять как один файл. - person jake9115; 09.05.2013