我有一个包含文件位置的脚本,我正在运行一个命令来修复文件。 但我无法将输出写入文件。
#!/bin/ksh
while read line
do
`shnfix "$line"` >> output.txt
done < filename.txt
在脚本开头添加set -x后生成的输出。
+ < filename.txt
+ read line
+ shnfix /x01/naveen_wav/file1.wav
+ >> output.txt
Fixing [/x01/naveen_wav/file1.wav] (3:49.42) --> [file1-fixed.wav] : 100% OK
Padded last file with 1194 zero-bytes.
+ read line
+ shnfix /x01/naveen_wav/file2.wav
+ >> output.txt
Fixing [/x01/naveen_wav/file2.wav] (4:30.35) --> [file2-fixed.wav] : 100% OK
Padded last file with 644 zero-bytes.
+ read line
答案 0 :(得分:1)
@ gile代码的更高效版本(I / O):
#!/bin/ksh
filename="/path/to/filename.txt"
while IFS= read -r line
do
shnfix "$line"
done < filename.txt > output.txt
答案 1 :(得分:0)
输出应该在`
中`shnfix $line >> output.txt`
所以脚本可能是这样的:
#!/bin/ksh
filename="/path/to/filename.txt"
while IFS= read -r line
do
# display line or do somthing on $line
echo "$line"
`shnfix $line >> output.txt`
done <"$fileName"
答案 2 :(得分:0)
只需删除反引号,它们至少会让人感到困惑。
写入,因为它将在子shell中执行命令并尝试执行结果,并向其添加重定向。
我假设你不想执行输出,但你想重定向输出。
如果输出以例如line
开头,这是一个正确的unix命令,它不会创建输出,你看不到错误,但是没有输出。
我得到test.ksh[4]: line1: not found [No such file or directory]
,其中'line1'是我的测试文件中的第一行。
或者将其保存在一个块中并重定向它的所有输出。使意图更清晰,更容易添加提交。
#!/bin/ksh
filename="/path/to/filename.txt"
{
while IFS= read -r line
do
shnfix "$line"
done < "$filename"
} > output.txt
http://www.shellcheck.net(一个大问题排查工具)会给出类似的提示