是什么导致工作目录被更改(如果未调用`Dir.chdir`)?

时间:2018-12-07 23:38:12

标签: ruby chdir pwd

我有一个脚本,该脚本使用Dir.getwd多次获取当前工作目录。然后用它来做事。这始终可为99.9%的用户提供服务,但对于某些用户,在 some 情况下它返回意外值。这会导致异常。

什么会导致工作目录更改?

(在该代码中根本没有调用{Dir.chdir。)


背景故事:

我为以红宝石编写的开源mobile automation command line tool fastlane做出了贡献。

我们有一个问题,少数用户报告by a File.join抛出了no implicit conversion of nil into String (TypeError)个错误,其中a method self.path in the same file提供了一个参数。

self.path试图通过使用File.directory?File.exist?找出某些配置的路径。通常,方法中的第一行value ||= "./#{FOLDER_NAME}/" if File.directory?("./#{FOLDER_NAME}/")应该“触发”并设置值。这就是我们99.9%的用户使用它的方式。

对于其余的少数方法,使用此方法前1或2次有效,然后变得不稳定并返回意外值或根本不返回-由于该方法没有后备功能,因此可以返回{{1} }如果6个条件都不满足。但是:这些条件是检查未被触摸的文件,并且在第一次调用时,其中一个条件确实是正确的(应该如此)!

(不幸的是,我根本无法在计算机上重现该问题。)

通过puts debugging via a branch and a discussion in a GitHub issuebranch is here),我们可以将其固定到工作目录,并且以意外的方式更改-多次。它从执行脚本的nil到配置所在的project_directory,或者相反。

这本身是可以的,因为正是针对这两种情况制作了该方法。但是值似乎在代码的每一行中都改变了! (这里有一个comment on the GitHub issue,显示了project_directory/fastlane突然返回其他值)因此,没有条件可以满足,我们得到了Dir.getwd

有什么想法会导致这种情况吗?

0 个答案:

没有答案