【发布时间】:2014-01-16 18:27:50
【问题描述】:
我正在尝试将循环代码从 bash 调整为 csh:
while read file; do
if ! UPLOAD_FILE=$(ls "$UPLOAD_ARCHIVE_DIR"/*$file* 2>/dev/null); then
echo "could not find $file"
(( MISSING_COUNTER++ ))
continue
fi
ls -l "$UPLOAD_FILE" | sed 's/^[^ ]* *[^ ]* *[^ ]* *[^ ]* *[^ ]* *//'
cp "$UPLOAD_FILE" "$PROCESS_FILES_DIR"
DOS_FILE=$(basename "$UPLOAD_FILE")
SOR_FILE=$(echo $DOS_FILE | sed 's/.dat/.sor/')
unix2dos "$PROCESS_FILES_DIR"/"$DOS_FILE" 1>/dev/null 2>&1
mv "$PROCESS_FILES_DIR"/"$DOS_FILE" "$UPLOAD_PROCESS_DIR"
(( FOUND_COUNTER++ ))
done < "$1"
输入信息来自变量 $input 并包含一个列表,这里是列表中的一个示例记录:PL000000002002638908
到目前为止,我已经尝试使用 foreach 和 while 循环但没有成功,任何帮助都非常感谢!
【问题讨论】:
-
你为什么要这样做? bash 通常被认为是一种更好的脚本语言。 (我不确定在 csh 中模拟
while read ...循环的效果如何。)例如,请参阅 perl.com/doc/FMTEYEWTK/versus/csh.whynot。 -
这个问题似乎离题了,因为它太宽泛了。应该编辑问题以针对您在翻译时遇到问题的特定部分提出具体问题,而不是泛泛地询问一大段代码。
-
@keith-thompson 我需要使用 csh 的原因是因为它是服务器上唯一的环境,他们拒绝我使用 bash。
-
@john-kugelman 我已经指定了相关主题。另外,我已经从代码中删除了额外的信息。
-
你是说机器上的
/bin/sh其实是csh?我发现这不太可能,而且将bash代码显示为符合 POSIX 标准要比将其转换为csh容易得多。