命令适用于终端,但不适用于shell脚本

时间:2018-01-17 11:35:54

标签: linux shell tcsh

以下命令适用于我的终端,但不适用于我的shell脚本。我后来发现我的终端是/ bin / tcsh。有人可以告诉我我需要为/ bin / sh做些什么改变。以下是我需要更改的命令:

cp source_dir/*/dir1/*.xml destination_dir/
Error in sh-> cp: cannot stat `source_dir/*/dir1/*.xml': No such file or directory

sed -i "s+${initial_name}+${final_name}+" $file_name
This one does not complain but does not work as well.

我正在添加测试示例。代码倾向于重命名xml文件的名称以及xml文件的内容。例如 -

  • 文件名crr.ya.na.aa.xml应更改为aa.xml
  • crr.ya.na.aa.xml中的同名也应该从crr.ya.na.aa更改为aa

以下是代码:

#!/bin/sh

# Create dir structure for testing
rm -rf audience
mkdir audience
mkdir audience/dir1 audience/dir2 audience/dir3
mkdir audience/dir1/ipxact audience/dir2/ipxact audience/dir3/ipxact
touch audience/dir1/ipxact/crr.ya.na.aa.xml
echo "<spirit:name>crr.ya.na.aa</spirit:name>" >   audience/dir1/ipxact/crr.ya.na.aa.xml
touch audience/dir2/ipxact/crr.ya.na.bb.xml
echo "<spirit:name>crr.ya.na.bb</spirit:name>" >   audience/dir2/ipxact/crr.ya.na.bb.xml
touch audience/dir3/ipxact/crr.ya.na.cc.xml
echo "<spirit:name>crr.ya.na.cc</spirit:name>" >   audience/dir3/ipxact/crr.ya.na.cc.xml

# Create a dir for ipxact_drop files if it does not exist
mkdir -p ipxact_drop
rm -rf ipxact_drop/*
cp audience/*/ipxact/*.xml ipxact_drop/

ls ipxact_drop/ > ipxact_drop_files.log

cat ipxact_drop_files.log | \
awk '{ split($0,a,"."); print a[length(a)-1] "." a[length(a)] }' ipxact_drop_files.log > file_names.log

cat ipxact_drop_files.log | \
awk '{ split($0,a,"."); print "mv ipxact_drop/" $0 " ipxact_drop/" a[length(a)-1] "." a[length(a)] }' ipxact_drop_files.log > command.log

chmod +x command.log
./command.log

while read line
  do
    echo ipxact_drop/$line
    initial_name=`grep -m 1 crr ipxact_drop/$line | sed -e 's/<spirit:name>//' | sed -e 's/<\/spirit:name>//' `
    final_name="${line%.*}"
    echo $initial_name
    echo $final_name
    sed -i "s+${initial_name}+${final_name}+" ipxact_drop/$line  
done < file_names.log

echo " ***** SCRIPT RUN FINISHED *****"

只有最后的sed命令无法正常工作

1 个答案:

答案 0 :(得分:0)

我正在阅读其他一些帖子,并了解xml文件可能存在脚本问题。到目前为止,这对我有用。

删除cp错误:将#!/ bin / sh -f替换为#!/ bin / sh

要删除测试输入的sed错误:将sed -i ......替换为sed -i.back ....