当我以文件夹作为参数运行此脚本时,我收到此错误:
lab9.sh:1:eval:语法错误:“(”意外
但这怎么可能呢?我的第1行没有左括号。我认为问题是我的shebang,但你可以看到它处于完美的状态。我脚本中的其他所有内容似乎都是有序的。
#!/bin/bash
file=$1
firstPart='tar -cvf n00866097_Backup('
date='`date +%Y-%m-%d`'
lastPart=').tgz $file'
zippedFile=$firstPart$date$lastPart
eval $zippedFile
pscp -pw password $zippedFile user@192.168.100.80:[test]/
答案 0 :(得分:1)
您需要引用包含()
文字的文件名。您可以使用$()
执行date
命令。并且不要将zipFile
与创建它的命令混淆,否则您的pscp
将无效。像,
file="$1"
zippedFile="n00866097_Backup($(date +%Y-%m-%d)).tgz"
cmd="tar -cvf \"$zippedFile\" \"$file\""
eval "$cmd"
答案 1 :(得分:0)
除了eval
之外,不需要$date
或变量:
date=$(date +%Y-%m-%d)
tar -cvf n00866097_Backup\(${date}\).tgz $1
pscp -pw password \
tar -cvf n00866097_Backup\(${date}\).tgz $1 \
user@192.168.100.80:[test]/
答案 2 :(得分:0)
当然shell的错误信息是正确的。在您的脚本中,shell被调用两次。首先,通过运行./lab9.sh
之类的东西来启动脚本时调用它。在执行此脚本期间,eval
在执行
eval $zippedFile
在这个上下文中,这个新启动的shell应该执行语句
tar -cvf n00866097_Backup(`date +%Y-%m-%d`).tgz
对于这个新shell,这个语句是第一个,所以它的行号是1.但是(
和)
对shell有特殊含义它在语法上是错误的放置他们在这里,所以提出了一个错误。如果你想将它们作为文件名的一部分,你必须逃避它们。但是检查其他答案,在这里使用eval
并不是一个好主意。