perl 反引号:使用 bash 而不是 sh
我注意到,当我在 perl 中使用反引号时,命令是使用 sh 而不是 bash 执行的,这给我带来了一些问题。
我怎样才能改变这种行为,以便 perl 将使用 bash?
附言。我尝试运行的命令是:
paste filename <(cut -d \" \" -f 2 filename2 | grep -v mean) >> filename3
I noticed that when I use backticks in perl the commands are executed using sh, not bash, giving me some problems.
How can I change that behavior so perl will use bash?
PS. The command that I'm trying to run is:
paste filename <(cut -d \" \" -f 2 filename2 | grep -v mean) >> filename3
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
这个例子对我有用:
This example works for me:
为了处理运行 bash 和嵌套引号,本文提供了最佳解决方案:如何在 Perl 的 system() 中使用 bash 语法?
To deal with running bash and nested quotes, this article provides the best solution: How can I use bash syntax in Perl's system()?
我以为
perl
会尊重$SHELL
变量,但后来我想到它的行为实际上可能取决于系统的exec
实现。在我看来,exec
你总是可以执行
qw/bash your-command/
,不是吗?I thought
perl
would honor the$SHELL
variable, but then it occurred to me that its behavior might actually depend on your system'sexec
implementation. In mine, it seems thatexec
You can always do
qw/bash your-command/
, no?创建一个 perl 子例程:
并像下面一样使用它:
或者使用 perl here-doc 来执行多行命令:
Create a perl subroutine:
And use it like below:
Or use perl here-doc for multi-line commands:
我喜欢制作一些函数
btck
(集成了错误检查)和bash_btck
(使用 bash):我喜欢使用 bash 的原因之一是为了安全的管道行为:
I like to make some function
btck
(which integrates error checking) andbash_btck
(which uses bash):One of the reasons I like to use bash is for safe pipe behavior:
“系统外壳”通常不是可变的。请参阅 perldoc -f exec:
如果您确实需要 bash 来执行特定任务,考虑显式调用它:
甚至:
您还可以将 bash 命令放入 .sh 文件中并直接调用它:
The "system shell" is not generally mutable. See perldoc -f exec:
If you really need bash to perform a particular task, consider calling it explicitly:
or even:
You could also put your bash commands into a .sh file and invoke that directly:
尝试一下
,我相当确定 -c 的参数是按照 bash 解释其命令行的方式来解释的。诀窍是保护它免受
sh
的影响 - 这就是引号的用途。Try
I am fairly sure the argument of -c is interpreted the way bash interprets its command line. The trick is to protect it from
sh
- that's what quotes are for.