比较来自世界各地的卖家的域名和 IT 服务价格

将路径作为参数脚本 shell

我写了一个脚本 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[ <="" code]="" div="">
<div class="answer_text">
您的代码和您的问题略微混淆,不清楚。

似乎你打算
[code]find

您的文件指定为脚本的参数,但由于
maxdepth

.

如果你给
next/123/file.txt

作为一个论点,你的
find

给你一个警告:

查找:警告:您有参数 - maxdepth
不是选项-mone_enexpiler的参数,但选项不是位置 /-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 ] &amp;&amp; echo "Usage: $0 <file>" 1&gt;&amp;2 &amp;&amp; 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 ] &amp;&amp; exit 2

echo
echo "----[ COMPILING ]----"
echo
dir &amp;&gt; filelist.txt # list directory contents and write to filelist.txt
gcc writefile.c # ???

FILE_RUN="run_file.txt"
echo "$FILE" &gt; "$FILE_RUN"

./a.out

echo
echo "----[ CLEANING ]----"
echo

make clean
make -f makefile
./semantizer -da &lt; withfile.adb


</file></div>
</withfile.adb[>
已邀请:

二哥

赞同来自:

您的代码和您的问题略微混淆,不清楚。

似乎你打算
find

您的文件指定为脚本的参数,但由于
maxdepth

.

如果你给
next/123/file.txt

作为一个论点,你的
find

给你一个警告:

查找:警告:您有参数 - maxdepth
不是选项-mone_enexpiler的参数,但选项不是位置 /-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&gt;&amp;2 &amp;&amp; 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 ] &amp;&amp; exit 2

echo
echo "----[ COMPILING ]----"
echo
dir &amp;&gt; filelist.txt # list directory contents and write to filelist.txt
gcc writefile.c # ???

FILE_RUN="run_file.txt"
echo "$FILE" &gt; "$FILE_RUN"

./a.out

echo
echo "----[ CLEANING ]----"
echo

make clean
make -f makefile
./semantizer -da &lt; withfile.adb


</file>

要回复问题请先登录注册