2

if else ステートメントのすべてが正しくセットアップされていると思いますが、自分でコマンドを実行したかのように、コンテンツをシェル端末に出力し続けます。とにかく、これをエスケープして、端末に結果からのテキストを入力せずにこれらのコマンドを実行できますか?

#!/bin/bash
ps cax | grep python > /dev/null
if [ $? -eq 0 ]; then
  echo "Process is running." &
  echo $!
else
  echo "Process is not running... Starting..."
  python likebot.py &
  echo $!
fi

bash スクリプトを実行してから数分後の出力は次のようになります。

[~]# sh check.sh
Process is not running... Starting...
12359
[~]# Your account has been rated. Sleeping on kranze for 1 minute(s). Liked 0 photo(s)...
Your account has been rated. Sleeping on kranze for 2 minute(s). Liked 0 photo(s)...
4

5 に答える 5

3

シェル スクリプト内から出力をリダイレクトする場合は、exec を使用します。

exec 1>/dev/null 2>&1

これにより、今後すべてがリダイレクトされます。ログに出力したい場合:

exec 1>/tmp/logfile 2>&1

ログを追加するには:

exec 1>>/tmp/logfile 2>&1

復元できるようにハンドルをバックアップするには:

exec 3>&1 4>&2
exec 1>/dev/null 2>&1

# Do some stuff

# Restore descriptors
exec 1>&3 2>&4

# Close the descriptors.
exec 3>&- 4>&-

沈黙させたいスクリプトの特定のセクションがある場合:

#!/bin/bash

echo Hey, check me out, I can make noise!

{
    echo Thats not fair, I am being silenced!
    mv -v /tmp/a /tmp/b

    echo Me too.
} 1>/dev/null 2>&1
于 2013-08-20T12:30:02.323 に答える
1

次の 2 つのオプションがあります。

  • を使用して、標準出力をログ ファイルにリダイレクトできます。> /path/to/file
  • を使用して、標準出力をリダイレクト/dev/nullして完全に取り除くことができます> /dev/null

エラー出力もリダイレクトしたい場合は、&>

こちらをご覧ください

また、この特定の例とは関係ありませんが、一部の bash コマンドは「quiet」または「silent」フラグをサポートしています。

于 2013-08-20T12:27:06.243 に答える
0

すべての echo ステートメントの末尾に>> /path/to/outputfile/outputfile.txtを追加します

echo "Process is running." >> /path/to/outputfile/outputfile.txt

または、シェルからスクリプトを実行するときに出力をファイルに送信します

 [~]# sh check.sh >> /path/to/outputfile/outputfile.txt
于 2013-08-20T12:23:29.170 に答える