我的剧本内容
`sqlline.py tpxxx.entexxx.org <<END
!outputformat csv
!record /ap_data/DD3/Rawf/Raw_f_$1_$2.csv
select column1,column2,column3,column4 from DD3_vxxv_$1.DD3_vv_RAW_DATA where v_id=$3 and period=$4;
!record
!quit
END;`
`sed -i '1d;$d' /ap_data/DD3/Rawf/Raw_f_$1_$2.csv;
sed -i "s/'//g" /ap_data/DD3/Rawf/Raw_f_$1_$2.csv;
cd /ap_data/D2O/RawDownload/
zip Raw_f_$1_$2.zip Raw_f_$1_$2.csv;
scp Raw_f_$1_$2.zip txxx@daxxxx.entexxx.org:/opt/cdar/common/D2O/TabUpload/;
rm Raw_f_$1_$2.csv Raw_f_$1_$2.zip;`
执行脚本时:
./rawfile.sh: line 7: 0/?: No such file or directory
./rawfile.sh: line 13: adding:: command not found
脚本提供正确的输出。但仍然显示错误“没有这样的文件或目录”,“命令未找到”
我的文件权限是:-rwxrwxrwx
答案 0 :(得分:1)
您的脚本有两个主要可执行部分的反引号。
反引号导致内部内容在子shell中执行并替换回脚本。这意味着在您的情况下,您的脚本正在执行两个命令。其中一个是第一个反引号表达式的输出,另一个是第二个反引号表达式的输出。
例如:
$ `echo hello`
bash: hello: command not found
$ `echo echo hello`
hello
这里发生的是第一个echo
命令生成输出,该输出被替换到命令行中,使命令行仅由shell评估&#34; hello&#34; ..这不是命令。第二个命令行打印&#34; echo hello&#34;,这是一个有效的命令行,并评估打印&#34; hello&#34;。
从两个主要语句中删除反引号,直接执行命令。
#!/bin/sh
sqlline.py tpxxx.entexxx.org <<END
!outputformat csv
!record /ap_data/DD3/Rawf/Raw_f_$1_$2.csv
select column1,column2,column3,column4 from DD3_vxxv_$1.DD3_vv_RAW_DATA where v_id=$3 and period=$4;
!record
!quit
END
sed -i '1d;$d' /ap_data/DD3/Rawf/Raw_f_$1_$2.csv
sed -i "s/'//g" /ap_data/DD3/Rawf/Raw_f_$1_$2.csv
cd /ap_data/D2O/RawDownload/
zip Raw_f_$1_$2.zip Raw_f_$1_$2.csv
scp Raw_f_$1_$2.zip txxx@daxxxx.entexxx.org:/opt/cdar/common/D2O/TabUpload/
rm Raw_f_$1_$2.csv Raw_f_$1_$2.zip