bash 함수는 명령을 인수로 실행합니다.

bash 함수는 명령을 인수로 실행합니다.

저는 bash 스크립트를 작성 중이고 호스트 이름, 명령 및 파일이라는 3개의 매개변수를 사용하는 함수가 있습니다. 해당 호스트 이름에서 명령을 실행하고 출력을 파일 이름으로 리디렉션해야 합니다. 기능은 다음과 같습니다.

execmd ()
    {
    P_SERV="$1"
    P_CMD="$2"
    P_OUT="$3"

    X_SERV=`hostname`
    if [ "$P_SERV" = "$X_SERV" ] ; then
       $P_CMD >> $P_OUT
    else
       ssh $P_SERV $P_CMD >> $P_OUT
    fi
    }

내가 실행할 때 :

execmd venus "cat /proc/meminfo" /tmp/meminfo

오류가 발생했습니다.

cat /proc/meminfo: no such file or directory

왜 작동하지 않는지 아시나요? 로컬 호스트 이름이나 원격 호스트 이름을 사용하여 호출할 때 동작은 동일합니다.

답변1

SSH는 원격 셸을 실행합니다. 로컬 실행과 일관된 동작을 얻으려면 로컬 셸을 실행하세요.

if [ "$P_SERV" = "$X_SERV" ] ; then
   sh -c "$P_CMD" >> "$P_OUT"
else
   ssh "$P_SERV" "$P_CMD" >> "$P_OUT"
fi

잊지 마요대체 항목을 큰따옴표로 묶습니다.. 예를 들어, 큰따옴표 없이 P_CMD와일드카드를 포함하면 에 포함됩니다 ssh $P_SERV $P_CMD.

관련 정보