linux – 如何在用sh而不是bash运行的脚本中使用进程替换?

linux – 如何在用sh而不是bash运行的脚本中使用进程替换?,第1张

概述我试图在 shell脚本中传递命令,但收到错误: a.sh: command substitution: line 1: syntax error near unexpected token `('a.sh: command substitution: line 1: `comm -12 <( sort /home/xyz/a.csv1 | uniq) <( sort /home/abc/tem 我试图在 shell脚本中传递命令,但收到错误:
a.sh: command substitution: line 1: Syntax error near unexpected token `('a.sh: command substitution: line 1: `comm -12 <( sort /home/xyz/a.csv1 | uniq) <( sort /home/abc/tempfile | uniq) | wc -l'

代码片段 –

temp=`comm -12 <( sort /home/xyz/a.csv1 | uniq) <( sort /home/abc/tempfile | uniq) | wc -l`echo $temp
解决方法 目前尚不完全清楚,但是你在脚本顶部有一个不正确的shebang线的可能性非常高:
#!/bin/sh

或者您在测试时使用sh script.sh而不是bash script.sh,或者您在环境中设置了SHELL = / bin / sh或类似的东西.您的失败是在process substitution代码上.当Bash以sh运行时(在POSIX mode中),则进程替换不可用:

Process substitution is not available.

你需要写:

#!/bin/bashtemp=$(comm -12 <(sort -u /home/xyz/a.csv1) <(sort -u /home/abc/tempfile) | wc -l)echo $temp

甚至简单地说:

#!/bin/bashcomm -12 <(sort -u /home/xyz/a.csv1) <(sort -u /home/abc/tempfile) | wc -l

这将获得与回声后跟随捕获相同的效果.测试时,使用bash -x script.sh或bash script.sh.

解读难以理解的评论

在难以理解(现已删除)的comment中,信息似乎包括:

BASH=/bin/sh
BASHOPTS=cmdhist:extquote:force_fignore:hostcomplete:interactive_comments:progco‌mp:promptvars:sourcepath
BASH_AliASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_Cmds=()
BASH_liNENO=([0]=”0″)
BASH_SOURCE=([0]=”a.sh”)
BASH_VERSINFO=([0]=”4″ [1]=”1″ [2]=”2″ [3]=”1″ [4]=”release” [5]=”x86_64-redhat-linux-gnu”)
BASH_VERSION=’4.1.2(1)-release’
CVS_RSH=ssh
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:interactive-comments:posix
SHLVL=2

请注意,BASH = / bin / sh和SHELLOPTS = braceexpand:hashall:interactive-comments:posix.这些中的任何一个或两个都可能是问题的主要部分.

总结

以上是内存溢出为你收集整理的linux – 如何在用sh而不是bash运行的脚本中使用进程替换?全部内容,希望文章能够帮你解决linux – 如何在用sh而不是bash运行的脚本中使用进程替换?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/1033180.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存