我编写了bash脚本来打开作为参数传递的文件并将其写入另一个文件。但是,只有当文件位于当前目录中时,我的脚本才能正常工作。现在我需要打开并写入当前目录中不存在的文件。
如果compile是我的脚本的名称,那么./compile next/123/file.txt
应该在传递的路径中打开file.txt
。我该怎么办?
#!/bin/sh
#FIRST SCRIPT
clear
echo "-----STARTING COMPILATION-----"
#echo $1
name=$1 # Copy the filename to name
find . -iname $name -maxdepth 1 -exec cp {} $name \;
new_file="tempwithfile.adb"
cp $name $new_file #copy the file to new_file
echo "compiling"
dir >filelist.txt
gcc writefile.c
run_file="run_file.txt"
echo $name > $run_file
./a.out
echo ""
echo "cleaning"
echo ""
make clean
make -f makefile
./semantizer -da <withfile.adb
答案 0 :(得分:1)
您的代码和您的问题有点混乱且不清楚。
您似乎打算将find
文件作为脚本的参数提供,但由于maxdepth
而失败。
如果您以next/123/file.txt
作为参数,find
会给您一个警告:
find:warning:你在a之后指定了-maxdepth选项 非选项参数-iname,但选项不是位置(-maxdepth 影响之前指定的测试以及之后指定的测试 它)。请在其他参数之前指定选项。
同样-maxdepth
会为您提供深度find
,直到它退出后才会找到您的文件。 next/123/file.txt
的深度为2
个目录。
此外,您尝试复制find
中的给定文件,但之后也使用cp
复制了该文件。
如上所述,您的代码非常混乱,我不知道您要做什么。如果你能详细说明,我很乐意帮忙。)。
有一些问题是开放的:
find
该文件,如果你已经知道它的路径?你总是把整条路径作为一个论点吗?或者只是路径的一部分?只有basename
?writefile.c
做了什么?它是否将您的文件内容写入另一个文件? cp
已经做到了。我还建议使用带有CAPITALIZED字母的变量,并检查所用命令的退出状态,例如cp
和find
,以检查这些是否失败。
无论如何,这是我的脚本可以帮助你:
#!/bin/sh
#FIRST SCRIPT
clear
echo "-----STARTING COMPILATION-----"
echo "FILE: $1"
[ $# -ne 1 ] && echo "Usage: $0 <file>" 1>&2 && exit 1
FILE="$1" # Copy the filename to name
FILE_NEW="tempwithfile.adb"
cp "$FILE" "$FILE_NEW" # Copy the file to new_file
[ $? -ne 0 ] && exit 2
echo
echo "----[ COMPILING ]----"
echo
dir &> filelist.txt # list directory contents and write to filelist.txt
gcc writefile.c # ???
FILE_RUN="run_file.txt"
echo "$FILE" > "$FILE_RUN"
./a.out
echo
echo "----[ CLEANING ]----"
echo
make clean
make -f makefile
./semantizer -da < withfile.adb