[解決済み】bashに関数が存在するかどうかを判断する
2022-04-09 16:53:36
質問
現在、bashから実行されるユニットテストをいくつか行っています。ユニットテストはbashスクリプトで初期化、実行、クリーンアップされます。このスクリプトは通常、init()、execute()およびcleanup()関数を含んでいます。しかし、これらは必須ではありません。私は、これらが定義されているかどうかをテストしたいと思います。
以前、ソースをgrepしてsedすることで行いましたが、間違っていたようです。もっとエレガントな方法はないでしょうか?
編集:以下のスニップレットは魅力的なように動作します。
fn_exists()
{
LC_ALL=C type $1 | grep -q 'shell function'
}
解決方法は?
こんな感じです。
[[ $(type -t foo) == function ]] && echo "Foo exists"
組み込みの
type
コマンドは、何かが関数なのか、組み込み関数なのか、外部コマンドなのか、それとも単に未定義なのかを教えてくれます。
その他の例
$ LC_ALL=C type foo
bash: type: foo: not found
$ LC_ALL=C type ls
ls is aliased to `ls --color=auto'
$ which type
$ LC_ALL=C type type
type is a shell builtin
$ LC_ALL=C type -t rvm
function
$ if [ -n "$(LC_ALL=C type -t rvm)" ] && [ "$(LC_ALL=C type -t rvm)" = function ]; then echo rvm is a function; else echo rvm is NOT a function; fi
rvm is a function
関連
-
[解決済み] Bashスクリプトのset -o pipefailの意味を教えてください。
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bash prints リテラルの改行をエコーする \n
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] Bashでコマンドライン引数を解析するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Bashのif条件で「unary operator expected」エラーが発生する。
-
[解決済み】 '\r': コマンドが見つかりません - .bashrc / .bash_profile [重複].
-
[解決済み】予期しないトークン 'fi' 付近の構文エラー
-
[解決済み] テスト
-
[解決済み] bash スクリプトを実行しているドッカーエントリーポイントが "パーミッション拒否" になる
-
[解決済み] パイプと二重パイプのどちらの OR 演算子を使うか?
-
[解決済み] condaのアップデート後、ターミナルのプロンプトから(base)を削除する方法
-
[解決済み] ターミナルでbashスクリプトを実行するにはどうすればよいですか?
-
[解決済み] MINGW64 "make build" エラー。"bash: make: コマンドが見つかりません"
-
[解決済み] BashでDo-whileループをエミュレートする