gpt4 book ai didi

shell - 使用 Shell 检查文件是否存在,如果存在,则执行一组命令

转载 作者:行者123 更新时间:2023-12-01 10:00:05 28 4
gpt4 key购买 nike

我在 Stata 中有几行代码。我希望仅当这些行引用的 .txt 文件先验存在时才执行这些行。我想知道是否有可用于此目的的 shell 命令,我可以将其嵌入到 if 语句中。

例如,可能存在并且可能存在类似以下内容:

 insheet using "file.txt" if ('file.txt')

我的意图是说 insheet 文件 file.txt 仅当它存在时。我担心的是,如果我有 insheet 语句但文件不存在,程序会因语法错误而停止、失败、死机或任何你称之为的东西。

最佳答案

直接的答案是否定的。出于多种原因,没有像这样的语法。

  1. if 限定符分别测试每个观察的某个条件是否为真,以及文件是否存在不是逐个测试测试观察的适当条件。

  2. 完全不同的 if 命令只测试一次是否某件事是真的并且看起来更合适。实际上它并不用于此目的,但要了解更多信息,请参阅 help ifcmd

  3. Stata 没有基于成对的相同单引号 ' ' 的特殊语法。

但是,Stata 在这里提供了一个单独的结构

confirm file file.txt 

在实践中,只要文件不存在且文件不存在,就会停止执行文件或程序。捕获错误的一般方案类似于

capture confirm file file.txt 
if _rc == 0 insheet using file.txt
else {
<code if the file does not exist>
}

capture 被认为是吃掉 confirm 命令的返回码。通常,如果命令有效并已执行,则任何命令的返回码 _rc 为 0,否则为某个非零值。有时会测试特定的非零代码。实验表明 file not found 是返回代码 601。查找错误代码(在 [P] 错误中)的主要原因是传递看起来像官方的错误消息,但实际上知道零/非-零规则是本标题下的主要细节。

此处的示例使用 == 来测试相等性。

请注意,如果文件不存在,insheet using file.txt 严格来说并不是语法错误。就Stata的语言而言,那就是合法的句法。然而,这是一个很好的区别:它是每个普通意义上的错误。

(稍后)可以将整个过程短路

 capture insheet using file.txt 
if _rc != 0 {
<code if the file does not exist>
}

在这种情况下,文件不存在是 insheet 命令失败的假定解释。但是,如果 insheet 调用更复杂,带有 varlist 和/或选项,则命令失败可能会因其他原因而出现。所以总的来说,分离出文件是否存在的检查似乎是一个更好的策略。

关于shell - 使用 Shell 检查文件是否存在,如果存在,则执行一组命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17414357/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com