Bash опять bash (перенаправление)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
McLeod095
Сообщения: 477
ОС: Люблю слаку

Bash опять bash

Сообщение McLeod095 »

Все здрасте!!

не могу решить вот такую небольшую задачку
есть скрипт такого содержания

Код:

#!/bin/sh lines=$((`cat $0 | awk '/#!\/bin\/sh/,/^#END/{print}' | wc -l`+1)) echo "This file don't execute" prog=`tail -n +$lines $0 | gzip -cd | tar xvf -` echo $prog bash <$prog exit 0 #END &#31;�J&#3;��A �0&#16;���s��&#30;����W�5T"-&#20;&#3;M���+q��"��1�&#22;3���&#18;sqf_Z��oY��j��s����0&#4;�N�?&#25;ѝ{m&#30;��W&#17;��T>�}���㡽��6O��딤&#25;��$)Ӝ�N��!�y���uS��'5�e(


В данном примере все работает и файл находящийся в архиве выполняется, но вот хочется мне сократить количесвто строк и не использовать переменную prog а сделать просто перенапправлением но как понять не могу, пытался по разному. То есть охото получить что-то типа <code>bash <tail -n +$lines $0 | gzip -cd | tar xvf - </code>

Заранее спасибо!

ЗЫ. Пишу не для зловредства а для повышения знаний.
"Work PC" E6750/2GB/Asus P5B Deluxe/2x250GB/6600GT 128/Slackware Current (Win 2003 in VmWare)
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
Спасибо сказали:
Аватара пользователя
cy6erGn0m
Сообщения: 119
ОС: MandrivaLinux/Solaris 10

Re: Bash опять bash

Сообщение cy6erGn0m »

А почему нельзя

Код: Выделить всё

tail -n +$lines $0 | gzip -cd | tar xvf - | bash
I want to Believe!

They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
Спасибо сказали:
Аватара пользователя
McLeod095
Сообщения: 477
ОС: Люблю слаку

Re: Bash опять bash

Сообщение McLeod095 »

cy6erGn0m писал(а):
26.05.2009 15:10
А почему нельзя

Код: Выделить всё

tail -n +$lines $0 | gzip -cd | tar xvf - | bash


так не выходит, я уже много чего перепробовал
да и не нужно мне так
потому как не должен он выполнять файл если на нем нет exec
а если написать bash <file то баш его выполнит даже если на нем нет exec
"Work PC" E6750/2GB/Asus P5B Deluxe/2x250GB/6600GT 128/Slackware Current (Win 2003 in VmWare)
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
Спасибо сказали:
Аватара пользователя
cy6erGn0m
Сообщения: 119
ОС: MandrivaLinux/Solaris 10

Re: Bash опять bash

Сообщение cy6erGn0m »

Вот я делаю в терминале

Код: Выделить всё

cy6ergn0m@cgmachine ~ $ echo "echo 1" | bash
1
cy6ergn0m@cgmachine ~ $


никакого exec'а.
А вообще зачем там tar? Там правда много файлов?
Если и правда нужно много файлов, то почему нельзя выставить exec для того файла, который внутри сжатого архива? Он ведь при распаковке и распакуется как файл с exec.
I want to Believe!

They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
Спасибо сказали:
Аватара пользователя
cy6erGn0m
Сообщения: 119
ОС: MandrivaLinux/Solaris 10

Re: Bash опять bash

Сообщение cy6erGn0m »

Вот если файл один

Код: Выделить всё

cy6ergn0m@cgmachine ~/test $ cat test
echo 1
cy6ergn0m@cgmachine ~/test $ cat test | bzip2 --best --stdout | base64 > test_c
cy6ergn0m@cgmachine ~/test $ cat test2
#!/bin/bash

lines=$((`cat $0 | awk '/#!\/bin\/bash/,/^#END/{print}' | wc -l`+1))

echo $lines lines

tail -n +$lines $0

tail -n +$lines $0 | base64 -d | bunzip2 | bash

exit 0
#END
cy6ergn0m@cgmachine ~/test $ cat test_c >> test2
cy6ergn0m@cgmachine ~/test $ cat test2
#!/bin/bash

lines=$((`cat $0 | awk '/#!\/bin\/bash/,/^#END/{print}' | wc -l`+1))

echo $lines lines

tail -n +$lines $0

tail -n +$lines $0 | base64 -d | bunzip2 | bash

exit 0
#END
QlpoOTFBWSZTWa2D+pMAAAJZAAAQQAAgAApAoAAhk0wIYBX45cLuSKcKEhWwf1Jg

cy6ergn0m@cgmachine ~/test $ ./test2
13 lines
QlpoOTFBWSZTWa2D+pMAAAJZAAAQQAAgAApAoAAhk0wIYBX45cLuSKcKEhWwf1Jg
1
cy6ergn0m@cgmachine ~/test $


Я тут добавил base64 чтобы здесь показать всё это. Вот прекрасно выполнился вложенный скрипт.


Если именно архив, то выполнить один из скриптов можно так

Код: Выделить всё

cy6ergn0m@cgmachine ~/test $ cat test
echo 1
cy6ergn0m@cgmachine ~/test $ tar -c test | bzip2 --best --stdout | base64 >> test2
cy6ergn0m@cgmachine ~/test $ cat test2
#!/bin/bash

lines=$((`cat $0 | awk '/#!\/bin\/bash/,/^#END/{print}' | wc -l`+1))

echo $lines lines

tail -n +$lines $0

tail -n +$lines $0 | base64 -d | bunzip2 | tar -xO test | bash

exit 0
#END
QlpoOTFBWSZTWexmQTIAAIR7hMEQCAhAAH+AAARqw54gABAACCAAdBKJHqNGgGgNNNBJRqaAZAA0
Db7uxmQgpgAkXykOxrUCLkkD5PGm+bQBaVhtIap9jOVTcgQcqK5viL2UI+O4ow2pK89JzglKH1Lj
NEQPxdyRThQkOxmQTIA=
cy6ergn0m@cgmachine ~/test $ ./test2
13 lines
QlpoOTFBWSZTWexmQTIAAIR7hMEQCAhAAH+AAARqw54gABAACCAAdBKJHqNGgGgNNNBJRqaAZAA0
Db7uxmQgpgAkXykOxrUCLkkD5PGm+bQBaVhtIap9jOVTcgQcqK5viL2UI+O4ow2pK89JzglKH1Lj
NEQPxdyRThQkOxmQTIA=
1
cy6ergn0m@cgmachine ~/test $
I want to Believe!

They must find it difficult...
Those who have taken authority as the truth,
Rather than trusth as the authority.
/G.Messey/
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4462
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Bash опять bash

Сообщение Rootlexx »

McLeod095 писал(а):
26.05.2009 14:54
То есть охото получить что-то типа bash <tail -n +$lines $0 | gzip -cd | tar xvf -

Подстановка процессов:

Код: Выделить всё

bash < <(блок_команд)
Спасибо сказали:
Аватара пользователя
McLeod095
Сообщения: 477
ОС: Люблю слаку

Re: Bash опять bash

Сообщение McLeod095 »

cy6erGn0m писал(а):
26.05.2009 16:41
Вот если файл один

Код: Выделить всё

cy6ergn0m@cgmachine ~/test $ cat test
echo 1
cy6ergn0m@cgmachine ~/test $ cat test | bzip2 --best --stdout | base64 > test_c
cy6ergn0m@cgmachine ~/test $ cat test2
#!/bin/bash

lines=$((`cat $0 | awk '/#!\/bin\/bash/,/^#END/{print}' | wc -l`+1))

echo $lines lines

tail -n +$lines $0

tail -n +$lines $0 | base64 -d | bunzip2 | bash

exit 0
#END
cy6ergn0m@cgmachine ~/test $ cat test_c >> test2
cy6ergn0m@cgmachine ~/test $ cat test2
#!/bin/bash

lines=$((`cat $0 | awk '/#!\/bin\/bash/,/^#END/{print}' | wc -l`+1))

echo $lines lines

tail -n +$lines $0

tail -n +$lines $0 | base64 -d | bunzip2 | bash

exit 0
#END
QlpoOTFBWSZTWa2D+pMAAAJZAAAQQAAgAApAoAAhk0wIYBX45cLuSKcKEhWwf1Jg

cy6ergn0m@cgmachine ~/test $ ./test2
13 lines
QlpoOTFBWSZTWa2D+pMAAAJZAAAQQAAgAApAoAAhk0wIYBX45cLuSKcKEhWwf1Jg
1
cy6ergn0m@cgmachine ~/test $


Я тут добавил base64 чтобы здесь показать всё это. Вот прекрасно выполнился вложенный скрипт.


Если именно архив, то выполнить один из скриптов можно так

Код: Выделить всё

cy6ergn0m@cgmachine ~/test $ cat test
echo 1
cy6ergn0m@cgmachine ~/test $ tar -c test | bzip2 --best --stdout | base64 >> test2
cy6ergn0m@cgmachine ~/test $ cat test2
#!/bin/bash

lines=$((`cat $0 | awk '/#!\/bin\/bash/,/^#END/{print}' | wc -l`+1))

echo $lines lines

tail -n +$lines $0

tail -n +$lines $0 | base64 -d | bunzip2 | tar -xO test | bash

exit 0
#END
QlpoOTFBWSZTWexmQTIAAIR7hMEQCAhAAH+AAARqw54gABAACCAAdBKJHqNGgGgNNNBJRqaAZAA0
Db7uxmQgpgAkXykOxrUCLkkD5PGm+bQBaVhtIap9jOVTcgQcqK5viL2UI+O4ow2pK89JzglKH1Lj
NEQPxdyRThQkOxmQTIA=
cy6ergn0m@cgmachine ~/test $ ./test2
13 lines
QlpoOTFBWSZTWexmQTIAAIR7hMEQCAhAAH+AAARqw54gABAACCAAdBKJHqNGgGgNNNBJRqaAZAA0
Db7uxmQgpgAkXykOxrUCLkkD5PGm+bQBaVhtIap9jOVTcgQcqK5viL2UI+O4ow2pK89JzglKH1Lj
NEQPxdyRThQkOxmQTIA=
1
cy6ergn0m@cgmachine ~/test $


Да, так заработало.
Спасибо!
Кстати после проверки меня в принципе устраивает и этот вариант т.к. не извлекает файл в локальную ФС


Rootlexx писал(а):
26.05.2009 17:35
McLeod095 писал(а):
26.05.2009 14:54
То есть охото получить что-то типа bash <tail -n +$lines $0 | gzip -cd | tar xvf -

Подстановка процессов:

Код: Выделить всё

bash < <(блок_команд)



К сожалению данная конструкция не работает
пишет ошибку
а жаль
такой вариант мне больше нравится
"Work PC" E6750/2GB/Asus P5B Deluxe/2x250GB/6600GT 128/Slackware Current (Win 2003 in VmWare)
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4462
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Bash опять bash

Сообщение Rootlexx »

McLeod095 писал(а):
26.05.2009 18:29
пишет ошибку

Какую?
В прикреплённом скрипте в теме «Решение проблемы со сглаживанием шрифтов в KDE 4.2.» я использовал такую подстановку, работает.
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Bash опять bash

Сообщение Portnov »

sharutils
? :)
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Bash опять bash

Сообщение drBatty »

McLeod095 писал(а):
26.05.2009 18:29
К сожалению данная конструкция не работает

Shell

doc ~/test $ ll итого 32 -rw-r--r-- 1 doc doc 169 2009-05-23 02:11 du.sed -rw-r--r-- 1 doc doc 15 2009-05-18 04:28 lines1.txt -rw-r--r-- 1 doc doc 94 2009-05-18 04:28 lines2.txt -rw-r--r-- 1 doc doc 35 2009-05-18 04:28 lines3.txt -rw-r--r-- 1 doc doc 30 2009-05-25 19:05 st.txt -rw-r--r-- 1 doc doc 0 2009-05-18 04:28 test_drb.txt -rw-r--r-- 1 doc doc 0 2009-05-18 04:28 test.txt drwxr-xr-x 2 doc doc 4096 2009-05-23 01:42 ttt/ drwxr-xr-x 2 doc doc 4096 2009-05-23 01:46 ttt2/ -rwxr-xr-x 1 doc doc 75 2009-05-25 19:20 xdg.sh* doc ~/test $ cat <(ll && ll) итого 32 -rw-r--r-- 1 doc doc 169 2009-05-23 02:11 du.sed -rw-r--r-- 1 doc doc 15 2009-05-18 04:28 lines1.txt -rw-r--r-- 1 doc doc 94 2009-05-18 04:28 lines2.txt -rw-r--r-- 1 doc doc 35 2009-05-18 04:28 lines3.txt -rw-r--r-- 1 doc doc 30 2009-05-25 19:05 st.txt -rw-r--r-- 1 doc doc 0 2009-05-18 04:28 test_drb.txt -rw-r--r-- 1 doc doc 0 2009-05-18 04:28 test.txt drwxr-xr-x 2 doc doc 4096 2009-05-23 01:42 ttt/ drwxr-xr-x 2 doc doc 4096 2009-05-23 01:46 ttt2/ -rwxr-xr-x 1 doc doc 75 2009-05-25 19:20 xdg.sh* итого 32 -rw-r--r-- 1 doc doc 169 2009-05-23 02:11 du.sed -rw-r--r-- 1 doc doc 15 2009-05-18 04:28 lines1.txt -rw-r--r-- 1 doc doc 94 2009-05-18 04:28 lines2.txt -rw-r--r-- 1 doc doc 35 2009-05-18 04:28 lines3.txt -rw-r--r-- 1 doc doc 30 2009-05-25 19:05 st.txt -rw-r--r-- 1 doc doc 0 2009-05-18 04:28 test_drb.txt -rw-r--r-- 1 doc doc 0 2009-05-18 04:28 test.txt drwxr-xr-x 2 doc doc 4096 2009-05-23 01:42 ttt/ drwxr-xr-x 2 doc doc 4096 2009-05-23 01:46 ttt2/ -rwxr-xr-x 1 doc doc 75 2009-05-25 19:20 xdg.sh*

всё работает.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: