저는 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
.