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
$

トリックは、プレフィックスを付けて、現在のディレクトリを調べるようにシェルに指示することです./

$ ./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 に答える