쉘스크립트에서 파일실행시에 인자전달이 안됩니다..

void000의 이미지

안녕하세요.. 제가 안드로이드로 커널을 빌드를 하여 완성하는 과정에서 이걸 쉘 스크립트로 만들고자 하였습니다만 중간에 쉘에서 실행파일을 실행하는 과정에서 인자가 제대로 전달되지않아 이에관하여 조언을 받고자 합니다.. 알려주시면 감사하겠습니다 ㅠㅠ

우선 커널를 언팩할때 실행하면 터미널에 다음과 같이 뜹니다.
---------------
To recompile this image, use:
mkbootimg --kernel zImage --ramdisk initramfs.cpio.gz --base 0x80200000 --cmdline 'vmalloc=600M console=null lpj=67677 user_debug=31 msm_rtb.filter=0x0 ehci-hcd.park=3 coresight-etm.boot_enable=0 androidboot.hardware=geehrc' -o new_boot.img
---------------

그래서 저는 실행하는것을 out.txt로 저장하고(./umkbootimg $boot > out.txt)

이를 이용하여 쉘스크립트를 짰습니다.

#!/bin/bash

boot=$1

echo "Boot=$boot"

dir=${boot%.*}

cp "$dir/ramdisk.cpio.gz" initramfs.cpio.gz
cp "$dir/zImage" zImage

FULL_PATH=$(pwd)'/'

cat out.txt | while read line ;
do
if [ "$line" = "To recompile this image, use:" ];
then
read line
localrun="$FULL_PATH""$line"
echo $localrun
$localrun
fi
done

출력결과는 다음과 같습니다....

neptune@Planitune:~/android-kernel/tool$ ./test boot_ori.img
Boot=boot_ori.img
/home/neptune/android-kernel/tool/mkbootimg --kernel zImage --ramdisk initramfs.cpio.gz --base 0x80200000 --cmdline 'vmalloc=600M console=null lpj=67677 user_debug=31 msm_rtb.filter=0x0 ehci-hcd.park=3 coresight-etm.boot_enable=0 androidboot.hardware=geehrc' -o new_boot.img
usage: mkbootimg
--kernel
--ramdisk
[ --second <2ndbootloader-filename> ]
[ --cmdline ]
[ --board ]
[ --base ]
[ --pagesize ]
[ --ramdiskaddr ]
-o|--output

그런데 저위에 출력된 /home/neptune/android-kernel/tool/mkbootimg --kernel zImage --ramdisk initramfs.cpio.gz --base 0x80200000 --cmdline 'vmalloc=600M console=null lpj=67677 user_debug=31 msm_rtb.filter=0x0 ehci-hcd.park=3 coresight-etm.boot_enable=0 androidboot.hardware=geehrc' -o new_boot.img 이부분을 그대로 복사하여 실행하면 에러없이 잘됩니다..

혹시나 인자로 넘겨지는 파일 경로문제인가 싶어 일부로 틀리게 실행해보았습니다만
error: could not load ramdisk 'initramfs2.cpio.gz'
error: could not load kernel 'zImage2'
와 같은 에러가 뜹니다.. 아예 인자전달이 제대로 행해지고 있는 것 같지가 않아보입니다.. 어떡해하면 좋을까요.. 도움 부탁드립니다ㅠㅠ

익명 사용자의 이미지

똑같은방식으로 임시로 스크립트 작성하여 실행해봤는데 별 문제가 없는걸 보니 음..

1. out.txt에 저장될때 뭔가 보이지 않는 특수기호가 삽입됐다? -> 복사하지 말고 직접 out.txt를 타자로 작성하여 한번 다시 실험해보세요!
2. cat out.txt | while read line; do ...... done -> while read line; do ......... done < out.txt 로 한번.. (전혀 상관없을것 같긴합니다만)
3. localrun="$FULL_PATH""$line" -> localrun="${FULL_PATH}${line}" 으로 한번

void000의 이미지

neptune@Planitune:~/android-kernel/tool$ ./test boot_ori.img
Boot=boot_ori.img
/home/neptune/android-kernel/tool/mkbootimg --kernel zImage1 --ramdisk initramfs.cpio.gz --base 0x80200000 --cmdline 'vmalloc=600M console=null lpj=67677 user_debug=31 msm_rtb.filter=0x0 ehci-hcd.park=3 coresight-etm.boot_enable=0 androidboot.hardware=geehrc' -o new_boot.img
usage: mkbootimg
--kernel
--ramdisk
[ --second <2ndbootloader-filename> ]
[ --cmdline ]
[ --board ]
[ --base ]
[ --pagesize ]
-o|--output
neptune@Planitune:~/android-kernel/tool$ ./mkbootimg --kernel zImage1 --ramdisk initramfs.cpio.gz --base 0x80200000 --cmdline 'vmalloc=600M console=null lpj=67677 user_debug=31 msm_rtb.filter=0x0 ehci-hcd.park=3 coresight-etm.boot_enable=0 androidboot.hardware=geehrc' -o new_boot.img
error: could not load kernel 'zImage1'

저는 어째서 프로그램의 usage가 뜨는 걸까요... 말씀하신대로 해보았지만 아직도 인자가 재대로 넘어가지 않는 것같습니다..
보통 프로그램의 usage뜨는게 인자 수로 판별하는거니까 인자가 아예 전달되지않았다?... ...인건지...

out.txt///////////
To recompile this image, use:
mkbootimg --kernel zImage1 --ramdisk initramfs.cpio.gz --base 0x80200000 --cmdline 'vmalloc=600M console=null lpj=67677 user_debug=31 msm_rtb.filter=0x0 ehci-hcd.park=3 coresight-etm.boot_enable=0 androidboot.hardware=geehrc' -o new_boot.img
////////////////////

test/////////
#!/bin/bash

boot=$1

echo "Boot=$boot"

dir=${boot%.*}

cp "$dir/ramdisk.cpio.gz" initramfs.cpio.gz
cp "$dir/zImage" zImage

FULL_PATH=$(pwd)'/'

while read line;
do
if [ "$line" = "To recompile this image, use:" ];
then
read line
localrun="${FULL_PATH}${line}"
echo $localrun
$localrun
fi
done < out.txt
//////////////////////////

익명 사용자의 이미지

음.. 스크립트상 문제는 딱히 안보이는거 같은데 zImage1 파일이 없어서 Usage가 나타나는 것은 아닐까 싶기도 하네요
mkbooting의 Usage 발생 조건에 대해서도 한번 다시 봐보시는게 ..

void000의 이미지

To recompile this image, use:
mkbootimg --kernel zImage1 --ramdisk initramfs.cpio.gz -o new_boot.img

로 해보니 작동이 잘 됩니다.
아무래도 --cmdline 'vmalloc=600M console=null lpj=67677 user_debug=31 msm_rtb.filter=0x0 ehci-hcd.park=3 coresight-etm.boot_enable=0 androidboot.hardware=geehrc' 이부분이 문제인것 같아요
특히 '' 이 부분이요.. 텍스트파일에서 ''부분을 긁어오는데 뭔가 문제가 있는것같아요... 저로써는 해결할 방법을 모르겠네요..

ymir의 이미지

변수에 들어 있는 작은따옴표(') 가 escaping 되어서, --cmdline 의 인자로 'vmalloc=670M 만 들어가고..
나머지 부분은 mkbootimg 의 인자로 들어갔을 겁니다.
eval $localrun 처럼 앞에 eval 을 주고 실행해 보세요.

$ cat inf
mkbootimg --kernel zImage1 --ramdisk initramfs.cpio.gz --base 0x80200000 --cmdline 'vmalloc=600M console=null lpj=67677 user_debug=31 msm_rtb.filter=0x0 ehci-hcd.park=3 coresight-etm.boot_enable=0 androidboot.hardware=geehrc' -o new_boot.img
 
$ cat run.sh
#!/bin/bash
 
args=("$@")
 
i=0
until [ $i == $# ]
do
        echo ${args[$i]}
        let i++
done
 
$ read line < inf
 
$ sh run.sh $line
mkbootimg
--kernel
zImage1
--ramdisk
initramfs.cpio.gz
--base
0x80200000
--cmdline
'vmalloc=600M
console=null
lpj=67677
user_debug=31
msm_rtb.filter=0x0
ehci-hcd.park=3
coresight-etm.boot_enable=0
androidboot.hardware=geehrc'
-o
new_boot.img
 
$ eval sh run.sh $line
mkbootimg
--kernel
zImage1
--ramdisk
initramfs.cpio.gz
--base
0x80200000
--cmdline
vmalloc=600M console=null lpj=67677 user_debug=31 msm_rtb.filter=0x0 ehci-hcd.park=3 coresight-etm.boot_enable=0 androidboot.hardware=geehrc
-o
new_boot.img

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

익명 사용자의 이미지

localrun="${FULL_PATH}${line}" 직후에

localrun=`echo $localrun | sed s/\'/\"/g` 를 넣으셔서

'를 "로 바꾸고 다시 한번 해보세요..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.