今この問題を発見したことを願っています。次の点に注意してください。
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は成功を意味し、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
...残念ながら、以下では直接使用できません$?
。
gnuplot> file_exists = system("test -f exists.file; echo $?")
gnuplot> if (file_exists) { print "yes" } else { print "no" }
no
...論理を裏返す必要があります。
だから私は基本的にカスタムスクリプトソリューションを考えなければなりません(またはインラインスクリプトを1行で書く必要があります)...ファイルが存在することを知るために、stdoutのデフォルトコマンド(またはカスタムメッセージ)がすでにあると思いました。 。だから私はする必要はありません。:)
(これはls
候補かもしれませんが、標準出力出力が長すぎます。これを避けるには、すべての出力を抑制して現在の状態を返す必要があります。
$ ls exists.file 1>/dev/null 2>/dev/null ; echo $?
0
$ ls noexists.file 1>/dev/null 2>/dev/null ; echo $?
2
...しかし、これは2つのコマンド(そしてより多くの入力)と「リバース」ロジックです...)
それでは、Linuxでこれを行うための基本的なコマンドはありますか?
答え1
次の単一の bash コマンドを使用します。
[ -f /home/user/file_name ]
[]
テストを実行し、成功した場合は0を返します。
答え2
終了状態を反転させる必要があるように聞こえるので、次のようにすることができます。
system("[ ! -e file ]; echo $?")
または:
system("[ -e file ]; echo $((!$?))")
(参考-f
までにファイルが存在する場合一般的なファイルです。また、見ることができますこれは、関連するstackoverflow Q&Aに対する私の答えです。意味に関する追加の余談存在するここ)。
答え3
「論理を覆すこと」はどうですか?
file_exists = 1-system("test -f exists.file; echo $?")
答え4
これは働きます:
pwsh -c Test-Path /etc/passwd
...PowerShellがインストールされている場合。パスが存在する場合は「True」文字列を返し、存在しない場合は「False」を返します。 (この回答について「皮肉なことに役に立ちません」と表示されますか?)