5

条件に基づいていくつかのコマンドを実行するスクリプトを作成しました。ディレクトリにファイルが含まれている場合は、「screen -r」を実行します。それ以外の場合は「screen」を実行します。問題は、ディレクトリにファイルが含まれている場合でも画面が実行されることがあります。

if [ "$(ls -A $DIR)" ]; then
screen -r
else
screen
fi

私がやりたいのは、それを改良して 2 つのステートメントに分解することです。ディレクトリにファイルが含まれている場合は screen-r" を実行し、ディレクトリにファイルが含まれていない場合は "screen" を実行します

if [ "$(ls -A $DIR)" ]; then
screen -r
fi

&

if ["$(directory without files)"] ; then
screen
fi

# of file に基づいて実行されるステートメントでさえあるかもしれません。ディレクトリに X 個のファイルが含まれている場合。

誰かがこれで私を助けることができますか? 私が欲しいものを徹底的に説明したことを願っています。

ありがとう、

ジェフリー

繰り返しますが、すべての助けに感謝します。すべてが機能するようになりました。これが最終的なスクリプトです。これは iPhone 用で、私が作成している MobileTerm Backgrounder というアプリ用です。

#Sets up terminal environment? 

if [[ $TERM = network || -z $TERM ]]; then
export TERM=linux
fi

# This script automatically runs screen & screen -r (resume) based on a set of conditions. 

# Variable DIR (variable could be anything)

DIR="/tmp/screens/S-mobile"

# if /tmp/screens/S-mobile list files then run screen -x

if [ "$(ls -A $DIR)" ]; then
screen -x
fi

#if /tmp/screens/S-mobile contains X amount of files = to 0 then run screen -q

if [ $(ls -A "$DIR" | wc -l) -eq 0 ]; then
screen -q
fi
4

2 に答える 2

6

findここで役立つかもしれません:

if [[ $(find ${dir} -type f | wc -l) -gt 0 ]]; then echo "ok"; fi

UPD : とは-gt?

man bash-> / -gt/:

   arg1 OP arg2
          OP is one of -eq, -ne, -lt, -le, -gt, or -ge.  These arithmetic binary operators return true if  arg1  is  equal  to,  not
          equal  to,  less than, less than or equal to, greater than, or greater than or equal to arg2, respectively.  Arg1 and arg2
          may be positive or negative integers.

つまり、-gt「より大きい」ブール関数です。

于 2013-07-20T20:08:32.373 に答える
1

私はこのように使用lswcます:

if [ $(ls -A "$DIR" | wc -l) -gt 0 ]; then
   screen -r
else
   screen
fi

変数を二重引用符で囲む$DIR必要があります。そうしないと、スペースを含むディレクトリ名で問題が発生します。

于 2013-07-20T22:04:19.560 に答える