これに気づいたので、私がそれに遭遇したので、それがOKであることを願っています:
test
([
)コマンドを使用してファイルの存在をテストできることはすでに知っています。
$ touch exists.file
$ if [ -f exists.file ] ; then echo "yes" ; else echo "no" ; fi
yes
$ if [ -f noexists.file ] ; then echo "yes" ; else echo "no" ; fi
no
...しかし:)
、それはそこに少し入力するので、ファイルの存在結果を返す「デフォルト」の単一のコマンドがある場合、私はさまよっていましたstdout
か?
test
終了ステータスで使用することもできます$?
:
$ test -f exists.file ; echo $?
0
$ test -f noexists.file ; echo $?
1
...しかし、これはまだ2つのコマンドです-また、ロジックは「逆」です(成功の場合は0、失敗の場合は非ゼロ)。
私が求めている理由は、のファイルの存在をテストする必要があるからですgnuplot
。そのファイルの「system("command")
結果の文字ストリームを文字列としてstdoutから返します。」; でgnuplot
、私が直接行うことができます。
gnuplot> if (0) { print "yes" } else { print "no" }
no
gnuplot> if (1) { print "yes" } else { print "no" }
yes
だから私は基本的にこのようなもの(擬似)を書くことができるようにしたい:
gnuplot> file_exists = system("check_file --stdout exists.file")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
yes
...残念ながら、test
and を介して直接使用することはできません$?
。
gnuplot> file_exists = system("test -f exists.file; echo $?")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
no
...ロジックを逆にする必要があります。
だから、基本的にカスタムスクリプトソリューションのようなものを考え出す必要があります(または1つのライナーとしてスクリプトをインラインで記述する)...そして、0または1を印刷できるデフォルトコマンドがすでにある場合(またはカスタムメッセージ)ファイルの存在を標準出力するには、そうする必要はありません :)
(ls
これは候補かもしれませんが、stdoutの出力は非常に冗長です。それを避けたい場合は、すべての出力を抑制して、存在ステータスを再度返さなければなりません。
$ ls exists.file 1>/dev/null 2>/dev/null ; echo $?
0
$ ls noexists.file 1>/dev/null 2>/dev/null ; echo $?
2
...しかし、これもまた2つのコマンド(およびより多くの入力)と「反転」ロジックです...)
だから、Linuxでこれを行うことができる単一のデフォルトコマンドがありますか?
( [ -f py_concur.py ] && echo "file exists" ) || echo "file does not exist"
?