对于依赖于netrc的程序,是否有Windows解决方案?


1

我有一个在Windows上运行良好的Perl脚本,但是一个函数需要使用.netrc文件来检索凭据。

Windows上有Windows等效.netrc或其他解决方案吗?

Answers:


4

Windows应该是相同的,除了您的主目录位于不同的位置。

尝试在%userprofile%目录中查找.netrc

如果它丢失了,您可以通过创建一个名为.netrc.(最终.将消失)的新文件在资源管理器中创建它。

可能需要创建一个HOME指向的环境变量%USERPROFILE%,如下所示:setx HOME %USERPROFILE%


2
.netrc默认情况下,在Windows下不存在,并且需要特别为此脚本创建。将其放入%userprofile%将无法满足Windows约定,该约定具有每用户配置文件c:\Users\<Username>\AppData\...。请参阅我的回答。
Aaron Miller

我实际上试图创建一个,但它不是一个有效的文件名。
路易斯

1
你实际上可以有一个名为的文件... windows只是愚蠢而且认为.netrc是没有文件名的扩展名。尝试命名文件“.netrc”。(在最后和开头都有一个点)
TheCompWiz 2013年

1
@AaronMiller:无论如何,它不应该符合Windows惯例; 寻找的函数~/.netrc刚刚从Unix导入。(无论如何,Windows都有完全不同的凭据存储机制。)不,这样的文件在Unix上也不存在。
grawity 2013年

2
@Louis:通过命令行创建它(例如copy nul .netrc)或在记事本的“保存”对话框中输入双引号".netrc")的名称。
grawity 2013年

1

Windows OS上打开cmd.exe,键入

echo %HOME%

然后

echo %USERPROFILE%

输出应该相同。如果不这样做

setx HOME %USERPROFILE%

然后_netrc%USERPROFILE%目录中创建文件并添加

machine <hostname1>
login <login1>
password <password1>

这里的例子

重要!在Windows上你应该创建_netrc而不是.netrc

更多相关信息,请点击此处阅读


0

您可以检查是否在Windows上运行,如果是,请查询单独的配置文件,而不是查找.netrc

my $config_file = '';
if ($^O eq 'MSWin32') {
  $config_file = 'c:\\path\\to\\config.ini';
}
else {
  $config_file = '~/.netrc';
};

.netrc默认情况下,该文件位于用户的位置$HOME,其在Windows平台上的等效项为c:\{Users|Documents and Settings}\<Username>- Windows Vista及更新版本的“用户”,以及XP及更早版本的“文档和设置”。您可以在.netrc那里创建一个文件,并使用必要的凭据填充它,这将需要更少(或没有)您的代码更改 - 但是,它无法达到Windows的约定,这些约定将包含C:\Users\<Username>\AppData\Local\<Developer>\<Program>\或类似的配置文件。您是否宁愿修改代码以满足约定,或者只是查看用户配置文件基目录以方便起见。

当然,如果您在Cygwin Perl下运行脚本,您只需~/.netrc为用户帐户创建,填充它并完成。


对不起,我应该提到它不是我的脚本(它的大小超过600KB)。
路易斯

2
那么,在这种情况下,您可能会发现最简单的方法是创建一个格式正确.netrcC:\Users\<Username>,并查看脚本是否可以从那里找到它。如果没有,您可能需要深入研究代码以找出它在哪里以及如何查找文件,并修改它以做一些更合理的事情或将.netrc文件放在脚本期望找到它的任何地方。
Aaron Miller

或者文件名应该是_netrc
Peter Mortensen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.