我正在编写一个别名,该别名接受文件名的输入,然后在确保该文件是常规且可读的之后,将该文件复制cp -i
到备份文件夹$HOME/Backup
我对 UNIX 非常陌生,因此在完成此任务时遇到一些困难。这是我的代码:
alias getname='read filename'
alias vfile='getname; if [ ! -f $filename ]; then echo "Irregular file"; (exit 1); elif [ ! -r $file ]; then echo "Not readable"; (exit 2); fi;'
alias backup='vfile; if [ vfile ]; then cp -i $filename $home/Backup; fi;'
我已经测试了vfile
别名并且它有效,我收到的错误是:
-bash: syntax error near unexpected token ';'
当我将其vfile
作为第一个操作时,我就开始收到此错误;如果我不在vfile
if 语句之前运行,它将使用上次运行时的文件名。我必须确保vfile
在复制之前没有产生错误。
在我添加vfile
为第一个命令之前,我收到此错误:
cp: cannot create regular file '/Backup/*': No such file or directory
但我的主文件夹中确实有一个名为 Backup 的目录,所以我也不知道是什么原因造成的。
答案1
您的别名vfile
以 结尾;
,然后别名backup
以 开头vfile;
。因此,两个;
连续的 s 之间没有语句,这是不允许的:
$ echo ; ;
bash: syntax error near unexpected token `;'
去掉;
末尾的vfile
.
答案2
使用上一个问题中我的别名,而不是使用两个别名。
由于您的 vfile 别名如果错误会抛出错误代码,您可以这样做:
alias filebackup='vfile && cp -i "$filename" "$HOME/Backup/"'
会告诉它仅在退出时&&
执行命令cp
vfile
0
编辑 抱歉我累了
$home
不是有效的环境变量,因此除非您在某个地方手动设置它,以解释为什么您收到“没有这样的文件或目录”错误,因为它扩展为''
.也总是引用你的变量。