我有js.txt文件,其中包含javascript文件的路径。我想将所有javascripts输出到一个文件中。
js.txt内容:
JS / jQuery的/ jQuery的1.6.2.min.js
JS / jQuery的/ jquery的-UI-1.8.6.custom.min.js
我的bash脚本:
#!/bin/bash
WEBROOT=/home/rexxar/web/webroot/
FILE=$WEBROOT"js.txt"
cat "js.txt" | while read LINE; do
cat $WEBROOT$LINE >> js_all.js
done
终端输出是错误消息:“目录或文件不存在”,后面是每行的文件路径片段。
: Directory or file doesn't exist/jquery/jquery-1.6.2.min.js
: Directory or file doesn't exist/jquery/jquery-ui-1.8.6.custom.min.js
我确信所有路径都是正确的,文件确实存在。
答案 0 :(得分:2)
首先,一些建议。
1)检查文件js/jquery/jquery-1.6.2.min.js
和js/jquery/jquery-ui-1.8.6.custom.min.js
的绝对路径。使用readlink -f
和dirname
。
2)检查脚本运行目录的绝对路径。
3)考虑变量$ FILE。使用cat ${FILE}
代替cat "js.txt"
4)js.txt
中的空行也会给你带来一些问题。
5)你为什么要使用CAPS_VARIABLE_NAMES?
其次,解决方案。
我试图理解你的问题,所以我已经创建了你所有的文件:
$> cat js/jquery/jquery-1.6.2.min.js
test1
$> cat js/jquery/jquery-ui-1.8.6.custom.min.js
test2
$> cat js.txt
js/jquery/jquery-1.6.2.min.js
js/jquery/jquery-ui-1.8.6.custom.min.js
所以,就像Arnout Engelen所说(但我不明白为什么他使用>
代替>>
)
$> cat ./js.txt | xargs cat >> ./js_all
$> cat ./js_all
test1
test2
答案 1 :(得分:1)
怎么样:
cd $WEBROOT; cat js.txt | xargs cat > js_all.js
答案 2 :(得分:1)
在我看来,你的js.txt文件有DOS行结尾(回车+换行)而不是unix(只是换行),脚本将CR视为文件名的一部分。要么用dos2unix之类的东西转换文件,要么让脚本动态转换它:
...
tr -d "\r" <"js.txt" | while read LINE; do
....
答案 3 :(得分:1)
相对路径保存在js.txt中。您必须确保该路径在您执行脚本的目录中有效。除非在您的脚本中首先将'cd'命令运行到正确的目录。
如果目录事物是固定的,awk oneliner可以做你需要的。
awk '{if($0) system("cat "$0" >> js_all.js")}' js.txt