Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当源于Perl脚本时,Bash配置文件引发错误_Bash_Perl - Fatal编程技术网

当源于Perl脚本时,Bash配置文件引发错误

当源于Perl脚本时,Bash配置文件引发错误,bash,perl,Bash,Perl,获取了一行perl代码,它在发出.bash\u profile system('source~/.bash\u profile;osascript-e'退出应用程序“Chromium\”) 尽管包装器函数被调用并执行得非常好,但我从一个无关的bash函数中抛出了一个错误: /Users/me/.bashrc: line 9: syntax error near unexpected token `<' /Users/me/.bashrc: line 9: ` done < <

获取了一行perl代码,它在发出
.bash\u profile

system('source~/.bash\u profile;osascript-e'退出应用程序“Chromium\”)

尽管包装器函数被调用并执行得非常好,但我从一个无关的bash函数中抛出了一个错误:

/Users/me/.bashrc: line 9: syntax error near unexpected token `<'
/Users/me/.bashrc: line 9: `  done < <(find -L "$1" -type f -not -name *.swp -print0 | LC_COLLATE=C sort -dz)'
这个bash函数在直接寻源时不会抛出错误,只有在通过Perl脚本加载时才会抛出错误。我很想知道为什么


我正在运行bash 5.0.2版。

perl的
系统使用
/bin/sh
作为shell()。它不会理解特定于bash的语法,比如进程替换

您需要显式调用bash:

system 'bash', '-c', q{source ~/.bash_profile; osascript -e 'quit app "Chromium"'};
使用
q{}
单引号机制来避免反斜杠


bash注意事项:如果将其作为交互式shell调用,它会自动在bashrc中运行,因此您应该能够执行以下操作:

system 'bash', '-ic', q{osascript -e 'quit app "Chromium"'};

ref:

oscript不重要。它只是系统“osascript”命令的bash包装器。它正在被呼叫并按预期工作。谢谢。这暴露了我的一个盲点。我不确定
sh
bash
之间到底有什么区别。这有帮助:@StevieD,但请检查
ls-l/bin/sh
;通常情况下,
/bin/sh
只是指向另一个shell的链接,这通常是
bash
。然而,我发现调用
sh
(例如从终端调用)会有所不同——可能它不运行初始化,即使它确实运行
bash
。在这种情况下,这就是为什么explicit
bash
(通常应该做的事情)解决了您的问题。在Mac上,
/bin/sh
转到
Mach-O 64位可执行x86_64
我一直认为它们也是一样的。我上面提供的链接指出了不同之处。@zdim使用
sh
调用bash使其在中运行。不过,它确实读取启动文件。
system 'bash', '-ic', q{osascript -e 'quit app "Chromium"'};