2017-12-12 21 views
2

을 촬영하지 함수에서 두 번째 매개 변수 나는 정확히 여기하는 다른 파일에있는 함수에 두 번째 매개 변수를 전달할 수 없습니다 :배쉬 기능 - 어떤 이유로

$lsValidLocal | xargs -n 1 -I {} bash -c 'Push "{}" "**$inFolder**"

푸시 기능에 functions.sh$ inFolder 두 번째 매개 변수를 읽지 않습니다.

나는 여러 가지 방법을 시도, 이제 변수를 수출까지가 전 세계적으로 액세스 할 수 있도록하는 유일한 작업 방법 (아니지만 좋은 해결책)

script.sh

#!/bin/bash 
#other machine 
export otherachine="IP_address_otherachine" 

#folders 
inFolder="$HOME/folderIn" 

outFolder="$HOME/folderOut" 

#loading functions.sh 
. /home/ec2-user/functions.sh 

export lsValidLocal="lsValid $inFolder" 

echo $inFolder 

#execution 
$lsValidLocal | xargs -n 1 -I {} bash -c 'Push "{}" "$inFolder"' 

functions.sh

function Push() { 
     local FILE=$1 
     local DEST=$2 

     scp $FILE $otherachine:$DEST && 
     rm $FILE ${FILE}_0 && 
     ssh $otherachine "touch ${FILE}_0" 
} 

function lsValid() { #from directory 
     local DIR=$1 

     ls $DIR/*_0 | sed 's/.\{2\}$//' 
} 


export -f Push 
export -f Pull 
export -f lsValid 
+0

'푸시'의 인수를 표시하려고 했습니까? – mouviciel

답변

1

작성한 코드의 문제점은 $inFolder이 작은 따옴표 (')로되어있어 확장되지 않습니다. ded.

이것은 프로세스

bash <your scrpit> 
| 
\xargs ... 
    | 
    \bash -c Push ... 

귀하의 코드는 내부 쉘 외부 쉘 맞은 편에 값을 전송하지 않을의 세 개의 층으로 실행됩니다 ...하지만 당신이 사용하는 변수 inFolder을 확대하고

$lsValidLocal | xargs -n 1 -I {} bash -c 'Push "{}" "**$inFolder**"' 

내부 껍질. 당신이 정확하게 지적했듯이 내 보낸 환경 변수를 사용하여이를 수행 할 수 있습니다.

다른 방법은 xargs로 전달하기 전에 외부 셸을 확장하는 것입니다.

$lsValidLocal | xargs -n 1 -I {} bash -c "Push '{}' '**$inFolder**'" 

공지 사항 나는 xargs가 호출되기 전에 $inFolder 확장 할 수 있도록 '" 반전했다.

+0

이 질문에 대한 답변입니다. 감사합니다. – SimoneB