当前位置: 首页 > 面试题库 >

带有进程替换的Shell脚本中的语法错误

郑理
2023-03-14
问题内容

我有此Shell脚本,可用于备份系统。有一行:

tar -Pzcpf /backups/backup.tar.gz --directory=/ --exclude=proc --exclude=sys --exclude=dev/pts --exclude=backups --exclude=var/log / 2> >(grep -v 'socket ignored' >&2)

如您所见,我一直在尝试使用此博客文章通过tar过滤掉烦人的,无用的“套接字忽略”错误。

我在执行时从shell中得到的是:

/ bin / sysback:第45行:意外令牌>' /bin/sysback: line 45:tar 附近的语法错误-Pzcpf /
backups / backup –directory = / –exclude = proc –exclude = sys –exclude
= dev / pts –exclude = backups –exclude = var / log / 2>>(grep
-v’套接字被忽略’>&2)’


问题答案:

您使用的语法是基本Shell语法的bash扩展,因此您必须小心使用bash运行脚本。(Ksh也具有>(…)进程替换,但在重定向后不支持它。Zsh可以。)

给定您收到的错误消息,您正在bash中运行此脚本,但是以其POSIX兼容模式运行,而不是以完全bash模式运行。注意用显式#!/bin/bash行调用脚本。#!/bin/sh即使/bin/sh是bash的符号链接也不会这样做,因为bash如果以name调用,则以POSIX模式运行sh。如果使用bash功能,请始终按名称调用bash。

如果要使用bash功能,也请注意不要设置环境变量POSIXLY_CORRECT--posix在命令行上传递选项。



 类似资料:
  • 问题内容: 我要运行此脚本: 我将其运行为: 然后我得到“ ”。我发现了一些类似的情况,但仍然无法解决。我是shell脚本的初学者,但据我了解: 我使用的shebang是正确的,并选择了bash shell,所以流程替换语法应该可以工作 我从命令行尝试了同样的方法,并且可以正常工作。我检查了一下,它给了我“ ”,那么与在命令行中运行命令和调用同一shell的脚本有什么区别? 也许这很简单,但是我找

  • 本文向大家介绍Shell脚本中获取进程ID的方法,包括了Shell脚本中获取进程ID的方法的使用技巧和注意事项,需要的朋友参考一下 提问: 我想要知道运行中脚本子shell的进程id。我该如何在shell脚本中得到PID。 当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为“批处理进程”)。 在某些情

  • 5. Shell脚本语法 5.1. 条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1(注意与C语言的逻辑表示正好相反)。例如测试两个数的大小关系: $ VAR=2 $ test $VAR -gt 1 $ echo $? 0 $ test $VAR -gt 3 $ echo

  • 问题内容: 我想运行一个sh文件: 但是,出现以下错误: 如果我直接在命令行上尝试,它会完美运行。 路径和权限已被检查 知道会发生什么吗? 问题答案: 这不是“ sh文件”,而是 bash 脚本。如果使用来运行它,它将不起作用(因为extixlobs,即您要使用的shell功能,在POSIX sh中不受支持);它需要仅与运行,或用与启动时(因为它)。因此,将其描述为“ sh文件”会产生误导。而且,

  • 问题内容: 我在实现for循环时遇到问题。执行脚本时出现此错误 test1.sh:2:语法错误:循环变量错误 我不明白这个错误。 这是我的剧本 谁能告诉我ubuntu中sh(在ubuntu中它链接到破折号外壳)shell中for循环的语法? 问题答案: 您可能使用而不是。尝试,或者如果它是可执行的,则不行。

  • 本文向大家介绍处理Shell脚本中带有空格的变量(bash脚本),包括了处理Shell脚本中带有空格的变量(bash脚本)的使用技巧和注意事项,需要的朋友参考一下 本篇主要介绍bash脚本中对于含空格文件处理方式。 在批量处理音频文件时候使用下面的脚本发现含有空格的文件名并不能被处理; 通过set -x将执行信息打印出来,发现可以执行到,但是执行过程提示找不到对应的文件名,mv对应的source文