Bash 스크립팅 문제

Bash 스크립팅 문제

저는 bash 스크립팅에 서툴러서 다음과 관련해 도움이 필요합니다.

#!/bin/bash

if [ -e Pretty* ];then
ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 /home/xbmc/TV/Pretty_Little_Liars/ Pretty*
else
echo "No new folders"
fi

find -depth -type d -empty -exec rmdir {} \;

여기서 문제는 ncftpput 라인입니다. 대신 간단한 [ echo "working" ]을 수행하면 모든 것이 정상이지만 ncftpput-line을 시도하면 [ line 5: [: 너무 많은 인수]가 표시됩니다.

ncftpput 명령만으로도 잘 작동합니다.

어떤 아이디어가 있나요?

답변1

너무 많은 인수 오류를 발생시키는 둘 이상의 결과를 반환할 가능성이 높기 때문에 -e내부 에서 globbing을 사용할 수 없습니다 .[]

당신은 시도 할 수 있습니다:

shopt -s nullglob
if [[ -n "$(echo Pretty*)" ]]

또는

if [[ "$(echo Pretty*)" != "Pretty*" ]]

또한 들여쓰기, 공백 및 줄 연속을 사용하여 코드를 더 읽기 쉽게 만듭니다.

#!/bin/bash

shopt -s nullglob
if [[ -n "$(echo Pretty*)" ]]; then
    ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 \
        /home/xbmc/TV/Pretty_Little_Liars/ Pretty*
else
    echo "No new folders"
fi

find -depth -type d -empty -exec rmdir {} \;

답변2

시도 해봐.

#!/bin/bash -x

if [ -e "Pretty*" ];then
`ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 /home/xbmc/TV/Pretty_Little_Liars/ Pretty*`
else
echo "No new folders"
fi

find -depth -type d -empty -exec rmdir {} \;

답변3

글쎄요, 인수가 너무 많다고 불평한다면 for를 사용하여 중단하세요.

#!/bin/bash

if [ -e Pretty* ];then
   for FILE in Pretty*
   do
       ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 /home/xbmc/TV/Pretty_Little_Liars/ "$FILE"
   done
else
   echo "No new folders"
fi

find -depth -type d -empty -exec rmdir {} \;

$FILE 주위에 ""를 사용하면 이름에 공백이 있는 파일이 예상치 못한 작업을 수행하지 않도록 할 수 있습니다.

관련 정보