2017-03-29 11 views
0

シェルスクリプトの引数を使用して自己記述型のプログラムを起動する方法がわかりません。私はその親フォルダのバイナリが含まれているフォルダにいる場合は、私が今シェルスクリプトからオプションと引数を使ってカスタムバイナリを起動する方法

$ ../binary --opt1 arg1 --opt2 arg2 

でプログラムを起動することができ、引数およびオプションは、現在のフォルダ内のファイルを引数にリストされていると言います。

args.txt:

$ ./script.sh args.txt 

script.sh:

#!/bin/bash 

if [ $# != 1 ] 
then 
    exit 1; 
fi 

params=$(<"$1") 

../binary "$params" 
# ../binary <<<"$params" doesn't work either. 

--opt1 arg1 --opt2 arg2 

私は次のように現在のフォルダ内のシェルスクリプトからバイナリを実行しようとしている場合

どうすればこの作品を作れるのですか?

編集(更新スクリプト):

#!/bin/bash 

if [ $# != 1 ] 
then 
    exit 1; 
fi 

params=$(<"$1") 

START=$(date +%s) 
../binary "$params" 
# ../binary <<<"$params" doesn't work either. 
END=$(date +%s)                                
DIFF=$(($END - $START))                     
echo "Test took $DIFF seconds" 

答えて

0

使用コマンドsubstituion:./script.sh

#!/bin/bash 
../binary $(< "$1") 

$ ./script.sh args.txt 

コンテンツ

コマンド置換

コマンド置換により、コマンド名の代わりにコマンド出力が可能です。

  $(command) 
    or 
      `command` 

バッシュが削除後続の改行で、コマンドを実行し、コマンドの標準出力とコマンド置換を置換することによって展開を行う2つの形態があります。埋め込み改行は削除されませんが、単語分割中に削除される可能性があります。コマンド置換$(cat file)は同等であるがより速い$(< file)に置き換えることができます。

置換の古いスタイルのバッククォートのフォームを使用する場合、バックスラッシュは$、`、または\が続いたときを除き、その文字通りの意味を保持します。バックスラッシュの前にない最初のバッククォートは、コマンド置換を終了します。 $(command)フォームを使用すると、括弧内のすべての文字がコマンドを構成します。特別に扱われるものはありません。

コマンドの置換はネストすることができます。バッククォートされたフォームを使用するときにネストするには、内側のバッククォートをバックスラッシュでエスケープします。置換が二重引用符で囲まれていると、単語の分割とパス名の展開は結果に対して実行されません。

+0

レイテンシを測定する2つの「タイムコマンド」の間にコマンドを埋め込んでいるので、スクリプトから呼び出すことができます。たぶん私は – FloriHe

+0

を明確にするために編集する必要があります私は答えを編集しました。私はこのようにそれをテストし、それは私のためにうまく動作します。 – cmks

+0

作業中ですが、単語分割のために '' $ 1 ''を書く方が安全です。 – FloriHe

関連する問題