我想创建一个非常简单的bash脚本my_copy.sh
,它读取任意数量的输入文件,目标目录,最后要求确认是否要复制文件。
使用示例:./my_copy.sh
Type in the file names to copy:
file1 file2 Anna Kurt Arne
Type in the directory to copy to:
dir_3
Are you sure you want to copy the files:
Anna
Kurt
Arne
to the directory dir_3 (y/n)?
如果目标目录不存在,则应由脚本创建。
我的下一个问题:
我希望*字符执行简单的ls
命令。因此,如果我键入./my_copy *
,则在命令行中应列出我目录中的所有文件。
答案 0 :(得分:4)
除非在调用脚本时对*进行转义或引用,否则shell会在脚本获取之前展开它。
./ my_copy'*'
或
./ my_copy \ *
看起来你正试图在'cp'周围添加一个简单的确认包装。或者您是否试图以交互方式提示用户?
答案 1 :(得分:4)
你可以使用“cp -i”,这使它在覆盖之前具有交互性和提示性。您还可以将其添加为.bash_profile的别名,因此它始终会提示。
答案 2 :(得分:1)
你的第二个问题非常困难。 shell将尝试解释*并将其替换为当前目录中的所有项目。 shell为您提供*作为参数列表中唯一条目的唯一方法是,目录中的所有文件都是以点开头的名称。因此,您的示例命令实际上将使用$ 0 = my_copy和$ 1 = my_copy。
进行调用答案 3 :(得分:0)
您不能将*作为参数,但您可以将其替换为字母“e”,并执行此操作:
if [ "$1" = "e" ]
then
ls
else
return 0
fi