0

以下のコードについて、常に「ソースファイルが読み取れないか存在します。ファイルを確認してください」というメッセージが表示されます。Windows マシンで cygwin を使用してスクリプトを実行します。ファイルがその場所に存在する場合でも、同じメッセージが表示されます。ファイルが読み取れない理由の詳細を取得するにはどうすればよいですか。

#!/bin/ksh
#
# Scanning source file for existance and readable
file_loc="abc.xml"
if [ -f "$file_loc" -a -r "$file_loc"]
then
    print "Source file read.\n"
else
    print "Source file not readable or exists, please check the file $file_loc.\n"
fi
4

2 に答える 2

1

閉じ括弧の前にスペースが必要です:

if [ -f "$file_loc" -a -r "$file_loc" ]
于 2012-11-30T10:12:51.607 に答える
0
file_loc="abc.xml" && (< ${file_loc:?})

代替チェックです。利点は、エラーごとに異なるメッセージが返されることです。シェルにすべての作業を任せます。

これはどのように構築されていますか?この 1 行で、少なくとも 3 つの異なるメッセージをトリガーできます。

${varname:? オプションのメッセージ構文は、未定義の変数をチェックします。}これは、変数名のタイプミスを知らせる可能性があります。

(< ${file_lo:?} )

-bash: file_lo: parameter null or not set

(<filename) は、ファイルを開いて閉じようとするだけです。

$ (< nonesuch ) && echo ok

-bash: nonesuch: No such file or directory

$ (< /etc/shadow ) && echo ok

-bash: /etc/shadow: Permission denied

于 2012-11-30T19:58:38.037 に答える