我正在尝试运行一个带有通配符的脚本来搜索文件,但是因为收到错误而失败:
bash: *: syntax error: operand expected (error token is "*")
这个脚本在一台机器上运行正常,但是当尝试在ssh命令中使用时,它就会掉线。这是一个命令:
ssh -o StrictHostKeyChecking=no user@local-dev-server 'for i in *.version; do j=$(echo $i | cut -f 1 -d '.'); mv $i $((j+1)).version; done;'
有人可以告诉我如何解决这个问题。
答案 0 :(得分:1)
问题是,如果当前目录中没有.version
个文件,则代码会尝试将{1}添加到*.version
,这是算术错误。
在没有文件的目录中,观察:
$ ls
$ for i in *.version; do j=$(echo $i | cut -f 1 -d '.'); mv $i $((j+1)).version; done
bash: *: syntax error: operand expected (error token is "*")
如果有一个number.version文件,则代码将运行:
$ touch 1.version
$ ls
1.version
$ for i in *.version; do j=$(echo $i | cut -f 1 -d '.'); mv $i $((j+1)).version; done
$ ls
2.version
此外,cut
管道是不必要的。代码可以简化为:
for i in *.version; do mv "$i" "$((${i%.version}+1)).version"; done
此外,为避免丢失文件错误,请使用nullglob
:
shopt -s nullglob; for i in *.version; do mv "$i" "$((${i%.version}+1)).version"; done
答案 1 :(得分:-1)
尝试将选项包装在引号中:
ssh -o "StrictHostKeyChecking=no" user@local-dev-server 'for i in *.version; do j=$(echo $i | cut -f 1 -d '.'); mv $i $((j+1)).version; done;'
答案 2 :(得分:-1)
试试这个
ssh -o StrictHostKeyChecking=no user@local-dev-server `for i in `*.version`; do j=$(echo $i | cut -f 1 -d '.'); mv $i $((j+1)).version; done;'