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 行を実行すると [ 行 5: [: 引数が多すぎます ] が表示されます。

ncftpput コマンドだけでも問題なく動作します。

何か案は?

答え1

-einsideではグロブを使用できません[]。複数の結果が返される可能性があり、引数が多すぎるというエラーが発生するからです。

あなたが試すことができます:

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 の前後に "" を使用すると、名前にスペースが含まれるファイルが予期しない動作をすることがなくなります。

関連情報