私は単に、テキスト ファイルの内容を返す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
cat
STDIN
ファイル名を指定して実行した場合は無視されます。このコンテキストでは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