输出重定向创建文件“0”

时间:2012-04-19 07:56:02

标签: bash redirect ls

我正在使用通配符来检查返回代码,以确定通配符是否与文件匹配。虽然这很好用,但它总是创建一个0文件大小的文件0。有谁知道为什么?

$SSTDIR=/tmp/test
$SSTFILE=test

ls -1 $SSTDIR/$SSTFILE* &> /dev/null
if [ $? = 0 ]; then
    exit 2
fi

任何帮助将不胜感激:)

编辑:

# Anzahl Parameter überprüfen
if [ ${#} == "6" ]; then
    SST=$1
    IN=$2
    INFILE=$3
    SSTDIR=$4
    SSTFILE=$5
    SORT=$6
else
    echo "Verwendung: $0 \"SST Name\" \"Inbound Verzeichnis ohne /\" \"Name der eingehenden Datei\" \"Outbound Verzeichnis ohne /\" \"Name der ausgehenden Datei\" \"Stelle ab der sortiert wird\""
    exit 3 # Falsche Anzahl Parameter
fi

# Überprüfe ob das eingehende RVS Verzeichnis nicht leer ist
ls -1 $IN/$INFILE* &> /dev/null
if [ $? > 0 ]; then
    exit 1 # Keine Dateien gefunden
fi

# Überprüfe ob das SST Verzeichnis bereits Dateien beinhaltet
ls -1 $SSTDIR/$SSTFILE* &> /dev/null
if [ $? = 0 ]; then
    exit 2 # Dateien existieren bereits im SST Verzeichnis
fi

嗯,这就是一切,有更多的向下,但这不会导致问题,因为我已经通过退出测试了斑点。

4 个答案:

答案 0 :(得分:2)

正是因为$? > 0 !! > 0是一个创建文件0的重定向!您应该知道[ $? > 0 ]不是bash语法功能!这是对名为[的程序的正常命令行调用,该程序是test命令的链接。尝试:

$ which [
/usr/bin/[

所以你在那里使用的“表达式”不是表达式,它是普通的bash命令(带选项!)。因此,请使用-gt

if [ $? -gt 0 ] ; then ...

尝试man test查看所有可能的选项。

答案 1 :(得分:1)

尝试更改为:

if [[ $? -gt 0 ]]; then
    exit 1 # Keine Dateien gefunden
fi

你应该只对字符串使用>,而且只能在特殊结构中使用((...))和`[[...]]``。

答案 2 :(得分:0)

ls -1 $IN/$INFILE* &> /dev/null
if [ $? > 0 ]; then
    exit 1 # Keine Dateien gefunden
fi

请注意$? > 0部分。

答案 3 :(得分:0)

我不能说这是不是你的问题,但我通常会按如下方式写出来。

ls ... >/dev/null 2>&1