スクリプトではsourceコマンドを使用しますが、ターミナルコマンドラインで入力ファイルを定義します。

スクリプトではsourceコマンドを使用しますが、ターミナルコマンドラインで入力ファイルを定義します。

現在、変数を読み込み、以下のように動作するスクリプトがあります。

#!bin/bash
a=10
b=15
c=20

d=a*b+c
echo $d

しかし、以下を含む入力ファイルに分割したいと思います。

a=10
b=15
c=20

そしてタスクを実行するスクリプト

#!/bin/bash
d=a*b+c
echo $d

そしてこう呼ばれます。

./script.sh < input.in

もう少し掘り下げて、簡単なものを作ってみました。

./script.sh < input.in

これは答え170を返します。

しかし、これはうまくいきません。もう少し探してみると、スクリプトに「source」というコマンドが必要なようですが、この場合にはどうすればいいかわかりません。

できますか?これを行う最良の方法は何ですか?

答え1

からhelp source

source: source filename [arguments]
    Execute commands from a file in the current shell.

    Read and execute commands from FILENAME in the current shell.  The
    entries in $PATH are used to find the directory containing FILENAME.
    If any ARGUMENTS are supplied, they become the positional parameters
    when FILENAME is executed.

    Exit Status:
    Returns the status of the last command executed in FILENAME; fails if
    FILENAME cannot be read.

したがって、スクリプトに次の行を追加するだけです。

source input.in

またはこれ(POSIXバージョン):

. input.in

実行時に入力ファイルを渡すには、次のものを使用できます。位置パラメータ:

source "$1"
. "$1"

また、d=a*b+c「整数」属性がないと機能しません。d

declare -i d
d=a*b+c

またはあなたが使う算術拡張タスクの実行:

d=$((a*b+c))

例:

#!/bin/bash
source "$1"
d=$((a*b+c))
echo "$d"
$ ./script.sh input.in
170

答え2

これは非常に基本的な作業です。ファイルsource名のみを.入力した場合、結果はこの行がデフォルトスクリプトに含まれているのと同じです。

構文は簡単です。

source file_name

または

. file_name

いくつかのニュアンスがありますが、これはより進化しています。man bash | grep source詳細は参照してください。

関連情報