2
c_file=$( echo $2 | sed 's/\.c//g')
$c_file < $in_file > tempFile.out

参数 $5 是带我进入 C 程序的路径。我的 C 程序名称的“.c”。例如路径:/..../A3Solution.c

这会让我:

A3Solution < input.in > output.out

我得到一个运行时错误:

A3解决方案:找不到命令

我不知道为什么,但是当我在其他路径中运行其他 C 程序时它可以工作......关于如何更改我的程序的任何想法?我真的没有看到问题。我试过这样做:cat $5 and ls $5所以,我知道 $5 的路径是正确的。

4

1 回答 1

0

当前路径通常不在运行程序时搜索的路径中。例如

$ ls -l bla
-rwxr-xr-x 1 me me 17036 13. Okt 2012  bla
$ bla
bash: bla: command not found
$

诀窍是告诉你的shell在当前目录中查找,通过前缀./

$ ./bla
hello world
$

因为您真的不知道给定的文件是在当前目录中还是在其他目录中(除非您解析为“/”),您可以简单地为当前工作目录添加前缀(但如果您指定它将不起作用绝对路径)或使用类似realpath实用程序的工具将任何相对路径规范化为绝对路径。

您也可以使用 bash 的强大功能(如果您正在使用它,请去除尾随的 .c)。就像是:

exe_file=$(realpath ${2%.c})
if [ -e "${exe_file}" ]; then
   "${exe_file}" < "${in_file}" > tempFile.out
else
   echo "file '$2' not found or not executable" 1>&2
fi
于 2012-11-29T11:59:20.293 回答