Shebangを使用してSTDINを実行可能にする

Shebangを使用してSTDINを実行可能にする

データベースファイルを一覧表示するプログラムがあります。

次のようにシェルから直接呼び出されます。

db filename

ファイル全体をリストするか、次のようなものをリストします。

db 'filename :: conditions'

選択した要素のみを一覧表示...


別の方法は、すべてのパラメータを含むファイルを使用して呼び出すことです。

db < parameterfile

内容は次のとおりです(上記の「」とまったく同じ)。

filename
::
conditions

今、そのようなファイルを実行可能にしたいと思います。だから電話をかけることができます./parameterfile

私はコメント記号ではない#!/usr/bin/env dbので、shebangを使用することが失敗したと思います。#エラーメッセージが表示されます

db - Line 1 near ""#.//r" - " - syntax error

shell returned 26

これを行うことができる1行のコードはありますか?

ベストアンサー1

awk を shebang ラッパーとして使用します。

#! /usr/bin/awk BEGIN{getline;cmd="db"}{print|cmd}END{exit(close(cmd))}

... "db" commands here ...

あなたのスクリプトいいえexecve(2)直接実行する必要がありますが、シェル(または同様のコマンド)を介してのみfind -exec実行可能にすることを含む、より多くのオプションがあります。いいえ前にshebangを追加し、コマンドが理解するすべての言語の有効なコマンドスクリプトのままにしてくださいdb。それはすべて言語が何であるかによって異なります。たとえば、言語のコメント行が//(C ++のように)で始まる場合は、次のようになります。

// 2>/dev/null; exec db "$0" "$@"

... "db" commands here ...

おすすめ記事