基于slackware的Linux OS上的Shell脚本错误

时间:2012-08-22 20:06:17

标签: bash shell

我有一个可以在Ubuntu上运行的shell脚本,并根据需要为我提供输出。当我在slackware linux版本上测试相同内容时,我的脚本失败了。

脚本失败:

dialog --title "Test" --gauge "Copying file." 6 100 < <(
    rsync -a --progress test.tar.gz /media/sda1 | 
    unbuffer -p grep -o "[0-9]*%" | 
    unbuffer -p cut -f1 -d '%'  
    )

错误是:

Syntax error near unexpected token `<'

脚本无法执行的两个操作系统之间可能有什么不同? 如果我删除了对话框命令和括号等,脚本会成功执行。

2 个答案:

答案 0 :(得分:2)

最有可能的是,您正在尝试使用非bash shell运行bash脚本。或者使用较旧的bash版本。

首先,尝试明确地通过bash运行它,即:

bash script.sh

你也应该修理你的shebang指向bash:

#!/bin/bash

答案 1 :(得分:1)

[更新如下]

< <( ... )符号在bashzsh中是唯一的。语法错误是一个明显的标志,它无法被slackware shell识别。

slackware不使用bash,或者它的bash版本对于此功能来说太旧了。 检查两个平台上$ BASH_VERSION的值。

的可能替代方案
cat < <(
    ...
    ...
)

可能是:

cat <<< "$(
    ...
    ...
)"

这可以在bash,ksh93和zsh中使用,并且已经存在了一段时间。

更新

根据您的反馈,我查看了您尝试在此处使用的实际管道。 我相信您打算使用--progress输出的第3列作为对话框图形进度指示器的输入。

我尝试使用包含大量小文件的目录。您是否知道此百分比指标是每个文件?使用我的小文件,rsync每个文件只提供一次更新。由于每个文件都是一次性编写的,因此所有百分比都等于100%