入力がパラメータ、ファイル、または端末から来ているかどうかを検出する方法

入力がパラメータ、ファイル、または端末から来ているかどうかを検出する方法

Bashで特定のスクリプトが呼び出されたかどうかを知る方法はありますか?

$ myscript.sh myfile

または:

$ myscript.sh < myfile

myfile一部のスクリプトでは常に with のコンテンツにアクセスします$1が、今ではさまざまな状況に応じて動作を変更したいと思います。

編集:リダイレクトなしで呼び出すときの3番目のケースも必要です。

$ myscript.sh

ベストアンサー1

編集する:端末やファイルの入力を正しく検出するように-t変更されました。-t 0

ここで重要なのは、入力が端末から来るのかファイルから来るのかを知ることです。これに対するテストがあります(man test参照-t)。

bashスクリプトを実行するとします。

if [ -t 0 ]; then
    echo "Input from terminal"
    if [ $# -eq 0 ]; then
        echo "No input files specified on command line.  Error." >&2
    else
        echo "Input file given on command line.  It is $1"
    fi
else
    echo "Input coming from stdin"
fi

上記のechoステートメントを実際のコードに置き換えることで、さまざまなシナリオを処理できます。

アップデート、クイックテストスクリプト:

#!/bin/bash
[ -t 0 ] && echo "t is true" || echo "t is false"

ランニング:

$ test.sh testfile
t is true
$ test.sh < testfile
t is false
$

おすすめ記事