Sudo를 사용하여 .sh 스크립트를 실행하면 다른 출력이 생성됩니다.

Sudo를 사용하여 .sh 스크립트를 실행하면 다른 출력이 생성됩니다.

제가 작업 중인 스크립트에서 매우 이상한 동작을 발견했습니다. 내가 가진 것은 svn 저장소에 커밋이 이루어질 때마다 실행되는 svn 후크입니다. sqsh 명령을 실행하여 다른 스크립트(checkout.sh)를 생성한 다음 생성된 스크립트를 실행합니다. 스크립트를 수동으로 실행하면 생성된 스크립트는 다음과 같은 결과를 제공합니다.

/usr/bin/install -d /opt/www/targetRepo/svn/targetDir1; /usr/bin/svn http://mysite.com/svn/sourceRepo/targetDir1 /opt/www/targetRepo/svn/targetDir1 확인 ;
/usr/bin/install -d /opt/www/targetRepo/svn/targetDir2; /usr/bin/svn http://mysite.com/svn/srcRepo/targetDir2 /opt/www/targetRepo/svn/targetDir2를 확인하세요. ;

각 줄이 세미콜론으로 어떻게 끝나는지 확인하세요.

동일한 스크립트를 실행하지만/usr/bin/sudo -u myname

그런 다음 생성된 스크립트는 각 줄 끝의 세미콜론을 파이프 "|" 문자로 바꿉니다. 따라서 기본 스크립트가 생성된 스크립트를 실제로 실행하려고 하면 "잘못된 파일 끝" 오류와 함께 실패합니다.

고쳐 쓰다 내가 실행하려는 스크립트는 다음과 같습니다.

sudo-hook.sh

#!/bin/bash

/usr/bin/sqsh -o ./checkout.sh -w 999999 -h -S myserver -D mydb -U dbuser -P apassword -C "select distinct '/usr/bin/install -d /opt/www/targetRepo/svn/'+cast(p.id as varchar(32) )+'; /usr/bin/svn checkout http://mysite.com/svn/srcRepo/'+cast(p.id as varchar(32) )+' /opt/www/targetRepo/svn/'+cast(p.id as varchar(32) ) from frame_skus as sku join products as p on p.id=sku.frame_id join frame_colors as c on c.id=sku.color_id join frame_sizes as s on s.id=sku.size_id join value_options as cc on c.color_code_id=cc.id join product_files as img on img.product_id=p.id  and img.color_id=c.id and img.dtype='FRAME_IMAGE' join brands as b on p.brand_id=b.id and b.id=69;"
./checkout.sh

checkout.sh(생성된 스크립트):

/usr/bin/install -d /opt/www/targetRepo/svn/31903; /usr/bin/svn checkout http://mysite.com/svn/31903 /opt/www/targetRepo/svn/31903|
/usr/bin/install -d /opt/www/targetRepo/svn/31904; /usr/bin/svn checkout http://mysite.com/svn/31904 /opt/www/targetRepo/svn/31904|
/usr/bin/install -d /opt/www/targetRepo/svn/31905; /usr/bin/svn checkout http://mysite.com/svn/31905 /opt/www/targetRepo/svn/31905|

누군가 여기서 무슨 일이 일어나고 있는지 말해 줄 수 있습니까?

답변1

좋아, 문제를 찾은 것 같아. 분명히 sqsh는 "|" 문자를 추가했습니다. sqsh에는 명시적으로 설정하지 않으면 기본적으로 "bcp" 스타일로 설정되는 스타일(-m) 플래그가 있어 이러한 추가 문자가 추가됩니다.

여전히 궁금한 점은 sudo를 사용하여 실행할 때 한 스타일 "bcp"가 기본값으로 설정되지만 sudo 없이 실행할 때는 다른 스타일 "수평"이 기본값으로 설정되는 이유입니다.

관련 정보