パスが指定されていない場合に「cat」コマンドがハングしないようにするにはどうすればよいでしょうか?

パスが指定されていない場合に「cat」コマンドがハングしないようにするにはどうすればよいでしょうか?


私は単に、テキスト ファイルの内容を返すbash スクリプトを取得しようとしています。

#!/bin/bash
cat $1

問題は、ファイルへのパスがこの bash スクリプトに渡されない場合、スクリプトがどのようにして閉じられるかということです。

通常のコマンドラインでは、cat コマンドにファイル パスが指定されていない場合、コマンドはハングアップしません。

まるで何かを待っているかのようです。

答え1

#!/bin/bash
if [[ "$#" -ne 1 ]]; then
    echo "Usage: $0 [INPUT FILE]" 1>&2
    exit 1
fi
cat "$1"

答え2

コマンドには別の問題もあります。ファイル名にスペースが含まれている場合はどうなるのでしょうか?

#!/bin/bash
cat "$1"

特別な理由がない限り、常に引用符で囲んでください。そうすれば、cat ""ハングアップしません。代わりに、「そのようなファイルまたはディレクトリはありません」のようなエラー メッセージが生成されます。

答え3

catSTDINファイル名を指定して実行した場合は無視されます。このコンテキストではSTDIN、 への接続が/dev/null有効な解決策になります。

$ cat test.sh
#!/bin/bash
cat $1 < /dev/null
$ ./test.sh test.sh
#!/bin/bash
cat $1 < /dev/null
$ ./test.sh
$

この方法の欠点は、0ファイル名が指定されていない場合に返されることです。これを回避する方法はありません。指定されたファイルを開けない場合は、やはり失敗が返されます。

答え4

ファイルが存在する場合にのみファイルの内容を表示するには:

#!/bin/bash
[ -f "$1" ] && cat "$1"

このスクリプトでは、最初の引数が、cat

関連情報