rob*_*muh -1 git perl exec strawberry-perl
最近将Strawberry Perl放在Windows 8.1机器上exec
,并发现在git-bash中使用v5.8.8的行为与/bin/perl使用Strawberry的机器不同/c/strawberry/perl/bin/perl.这是我发现的非常简单的脚本(纯粹是在玩的时候偶然$PATH):
#!/usr/bin/env perl
my $comment = "@ARGV" || 'update';
exec "git status; git add -A . ; git status; git commit -m '$comment'; git push";
Run Code Online (Sandbox Code Playgroud)
这与git-bash(/bin/perl)工作正常,但在/c/strawberry/perl/bin/perl发现$PATH以下错误发生时:
git: 'status;' is not a git command. See 'git --help'.
Did you mean this?
status
Run Code Online (Sandbox Code Playgroud)
两种情况下的代码都相同.我的预感是草莓中的perl 5.18改变了exec命令本身的行为,因为它在上下文中解释了它的参数(就像perl喜欢这样做).
我主要担心的是,perl的两个版本在某种程度上使这个相当简单的代码在perl版本之间不兼容,而不是其他一些简单的系统配置问题,甚至可能是草莓发行版本身而不是perl的问题.
如果这是一个perl兼容性问题,我倾向于坚持使用v5.8.8,它完成了我想要Perl为我做的所有事情(在转到另一种语言之前).
execperl语句是否在这些版本之间发生了变化?我在互联网上找不到任何证据.
要重新创建此行为:
在Windows机器上安装git-scm.org:
which perl然后 ...
which perl这是了解正在发生的事情以及差异为何重要的最佳方式.这意味着为git-bash(v5.8.8)编写的标准perl脚本不适用于草莓中的5.18.我的下一步是在Linux机器上安装perl 5.18并确保其行为与5.8.8相同.如果有人已经这样做了,请告诉我.
注意:在我喜欢的情况下,使用其他操作系统不是一种选择,因为我们在需要Windows的相同机器上进行其他游戏开发.
注意:我使用Perl而不是Bash,因为我的小黑客往往会成长.我使用Perl而不是Python或Node,或者因为Perl标配,git-bash因此我不需要在每台学生机器上安装另一个.我只把草莓放在那里因为我想要添加剥离的perlpod功能git-bash.
对那些投票的人来说.您只是证明为什么stackexchange是一个很难找到准确信息和真正帮助的借口.感谢您验证我决定回到真正的专家所在的IRC,而不是那些为人气竞赛而游行的人.
这不是关于你的Perl版本,而是关于bash与Windows命令shell的关系.草莓的Perl的任何版本是建立在调用与像调用Windows命令外壳exec,system以及qx和perl附带git-bash显然是用于调用一个Unix仿真环境.为Cygwin构建的Perl是另一个在Windows上运行但是将外部命令发送到Unix仿真环境的解释器示例.
Windows命令shell无法识别;终止/分离命令的字符sh,因此您不能像exec使用git-bash perl一样在Strawberry Perl上运行一系列命令.
解决方法:
Windows确实对待(AFAICT)&&像bash这样的字符 - 你可以使用它是一个命令分隔符,只要命令成功就会继续执行命令
exec "git status && git add -A . && git status && git commit -m '$comment' && git push"
Run Code Online (Sandbox Code Playgroud)将命令列表放入批处理文件中,并调用exec批处理文件名.
将命令分成多个调用,使用system(返回)除最后一个之外的所有调用.
system("git status");
system("git add -A .");
system("git status");
system("git commit -m '$comment'");
exec("git push");
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
443 次 |
| 最近记录: |