我试图以递归方式展开目录中的所有.css
个文件。我使用的是beautifier(node.js工具)。它应该获取文件名,扩展其内容,并将结果写入stdout。所以以下几行很好地完成了这项工作:
./node_modules/.bin/beautifier ./css/foo.css > ./css/bar.css
但是当我将所有内容放入脚本中时,它只是将所有输出打印到stdout
并在退出后将所有文件留空:
echo "Expanding CSS files..."
for css in `find . -type f -name \*.css -print`
do
echo "Expanding $css"
temp="$css.tmp"
cp $css $temp
./node_modules/.bin/beautifier $temp>$css
rm $temp
done
我在这里做错了什么?
答案 0 :(得分:1)
这不是一个真正的答案,但是你的脚本会再次错误地用空格分割文件。你应该做类似下面的事情
#!/bin/bash
echo "Expanding CSS files..."
while IFS= read -r -d '' css
do
echo "Expanding $css"
temp="$css.tmp"
echo cp "$css" "$temp"
echo ./node_modules/.bin/beautifier "$temp" '>' "$css"
echo rm "$temp"
done < <(find . -type f -name \*.css -print0)
我把echo
放在任何地方,引用>
左右,所以除了告诉你它会做什么之外,它实际上并没有做任何事情。还可以执行#!/bin/bash -x
,这将显示执行命令时正在执行的操作。
答案 1 :(得分:0)
将变量放在""
中可以解决问题
echo "Expanding CSS files..."
for css in `find . -type f -name \*.css -print`
do
echo "Expanding $css"
temp="$css.tmp"
cp $css $temp
./node_modules/.bin/beautifier "$temp" > "$css"
rm $temp
done
编辑:真正的问题是>
之间没有空格。但正如@Biffen指出的那样,这是一个很好的做法。如果这条线是这样的,
"$temp">"$css"
错误引发:
unexpected EOF while looking for matching `"'
syntax error: unexpected end of file
因此调试起来更容易。
虽然我的回答有效,但@Briffen被发现是真正的错误,应归功于他。