2013-04-03 5 views
0

Точно так же можно написать a file that autoextracts itself, я ищу способ авторизовать программу внутри скрипта (или того, что ему нужно). Я хочу, чтобы часть программы была написана, потому что мне нужен только один файл. На самом деле это проблема: у меня есть сжатая программа xz, и я хочу иметь возможность запускать ее без какого-либо вмешательства программы xz пользователем (просто ./theprogram).Файл, который автоматически запускается

Любая идея?

+1

Что вы подразумеваете под автозапуском? Можете ли вы просто поместить вызов в программу в скрипт, что с этим не так? –

+0

Я хочу программную часть скрипта, потому что мне нужен только один файл. На самом деле это проблема: у меня есть сжатая программа xz, и я хочу иметь возможность запускать ее без какого-либо вмешательства программы xz пользователем (просто './Theprogram'). – phaazon

+0

Если вы имеете в виду, можете ли вы создать архив, который извлекает себя и выполняет что-то из содержимого, да, конечно. Сценарий, выполняющий извлечение, удаляет встроенный исполняемый файл после его извлечения: 'exec yourexecutable ' (exec заменит текущий процесс - извлечение скрипта - исполняемым файлом). – William

ответ

0

Autorun после выполнения что? Авторизоваться? Позвоните по телефону ~/.bashrc. Во время загрузки? Напишите соответствующий /etc/init.d/yourprog и привяжите его к требуемому уровню запуска. Selfextract? Сделайте его архивом оболочки (файл shar). См. Утилиту shar, http://linux.die.net/man/1/shar

+0

см. Комментарий выше, я объяснил все. Я собираюсь изменить сообщение, это не так ясно, как я ожидал. – phaazon

0

Извините, но я просто подумал ... Что-то вроде этого не сработает? (я предполагаю, что это скрипт ...)

#!/bin/bash 

cat << 'EOF' > yourfile 
yourscript 
EOF 

chmod +x yourfile 

./yourfile 

Тем не менее, это довольно трудно понять, что именно вы пытаетесь сделать ... мне кажется, что «автозапуск» очень похож на «вызов программы из скрипта».

+0

Java-установщики использовали этот путь, вы получили бы большой скрипт оболочки с закодированным исполняемым файлом, встроенным в скрипт, который был декодирован и запущен. –

0

Я написал для этого сценарий. Это должно помочь: использование

#!/bin/bash 
set -e 
payload=$(cat $0 | grep --binary-files=text -n ^PAYLOAD: | cut -d: -f1) 
filaname=`head $0 -n $payload | tail -n 1 | cut -d: -f2-` 
tail -n +$(($payload + 1)) $0 > /tmp/$filaname 
set +e 
#Do whatever with the payload 
exit 0 
#Command to add payload: 
#read x; ls $x && (cp 'binary_script.sh' ${x}_binary_script.sh; echo $x >> ${x}_binary_script.sh; cat $x >> ${x}_binary_script.sh ) 
#Note: Strictly NO any character after "PAYLOAD:", not even newline... 
PAYLOAD: 

Пример:
Пусть myNestedScript.sh содержит ниже данных:

#!/bin/bash 
echo hello world 

Затем запустите

x=myNestedScript.sh; ls $x && (cp 'binary_script.sh' ${x}_binary_script.sh; echo $x >> ${x}_binary_script.sh; cat $x >> ${x}_binary_script.sh ) 

Он будет генерировать ниже файл, который вы можете непосредственно выполнить. После выполнения ниже файла он извлечет myNestedScript.sh в /tmp & запустит этот скрипт.

#!/bin/bash 
set -e 
payload=$(cat $0 | grep --binary-files=text -n ^PAYLOAD: | cut -d: -f1) 
filaname=`head $0 -n $payload | tail -n 1 | cut -d: -f2-` 
tail -n +$(($payload + 1)) $0 > /tmp/$filaname 
set +e 
chmod 755 /tmp/$filaname 
/tmp/$filaname 
exit 0 
PAYLOAD:myNestedScript.sh 
#!/bin/bash 
echo hello world