タグ付けされた質問 「function」

UnixおよびLinuxのコンテキストでの関数の使用に関する質問(ほとんどがシェルスクリプトに限定されません)。Python、Perl、Rubyなどでのプログラミングに関する質問は、Stack Overflowで質問してください。

1
一部のコマンドで特定のパラメーターを追跡する
たとえば、コマンドgit branch(常にいくつかの単語を含む)があるとします。 私が欲しいのは、このコマンドが引数付きで実行されたときを追跡することです。たとえば、git branch developエラーなしでコマンドを実行した場合develop、ファイルに保存します。 私のgitコマンドを.bash_profile次のように上書きしようとしました: git () { if [ $# -eq 3 ] then git $@ echo $2 > /path/tacked_parameters.txt else git $@ fi } しかし、それはうまくいかないようです。これを行う方法はありますか?
10 bash  shell  function 

6
Bash関数デコレーター
Pythonでは、関数に対して自動的に適用および実行されるコードで関数を装飾できます。 bashに同様の機能はありますか? 私が現在取り組んでいるスクリプトには、必要な引数をテストし、それらが存在しない場合は終了するボイラープレートがあり、デバッグフラグが指定されている場合はメッセージを表示します。 残念ながら、このコードをすべての関数に再挿入する必要があり、変更したい場合は、すべての関数を変更する必要があります。 このコードを各関数から削除し、それをすべての関数に適用する方法はありますか?Pythonのデコレーターと同様です?
10 bash  function 

2
パラメータまたはパイプからの入力を受け入れるBash関数
次のbash関数を、引数またはパイプから入力を受け入れることができるように記述したいと思います。 b64decode() { echo "$1" | base64 --decode; echo } 望ましい使用法: $ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" $ b64decode < file.txt $ b64decode <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" $ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQ=" | b64decode
10 bash  pipe  function  stdin 

2
引数をそのままの状態で機能させる
次の機能があります。 bar() { echo $1:$2; } この関数を別の関数から呼び出していますfoo。fooそれ自体は次のように呼び出されます。 foo "This is" a test 次の出力を取得します。 This is:a つまり、bar受け取る引数は、に渡すトークンと同じでなければなりませんfoo。 fooこれを達成するためにどのように実装する必要がありますか?次の2つの実装を試しましたが、どちらも機能しません。 foo() { bar $*; } –出力: this:is foo() { bar "$*"; } –出力: this is a test: 私の質問は、議論の引用をどのように保存できるかということです。これはまったく可能ですか?

6
dfとmountを使用する場合、物理ディスクのみを表示します
dfまたはを使用する場合mount、最も重要なのは物理ディスクパーティションです。最近では、これらのコマンドの出力は、一時的または仮想的なファイルシステム、cgroup、その他私が定期的に関心のないものに圧倒されています。 出力の物理パーティションは常に「/」で始まるためdf、およびのエイリアスを作成してみましたmount。 alias df1="df | egrep '^/'" alias mount1="mount | egrep '^/'" これは問題mount1なく動作します(ただし、 ' /'は赤で表示されます)。ただしdf1、-hオプションをに追加したい場合があるためdf、実行できませんdf1 -h。使用する可能性のあるすべてのオプションの組み合わせにエイリアスを設定したくない場合。私は本当にbashで関数を定義することを検討する必要がありますか?より良い解決策はありdf1ますか?


1
なぜbashは解析/実行のものも環境変数に入れるのですか?
bash のshellshockバグは、環境変数を介して機能します。正直なところ、次のような機能があることに驚きました。 「env varsによる関数定義の受け渡し」 したがって、この質問は完全に定式化されていない可能性がありますが、この機能が必要になる例またはケースを尋ねることですか? ボーナス。他のシェルzsh、ダッシュなどにもこの機能がありますか?

2
Gawk:配列を関数に渡す
GNU awk 3.1.6で立ち往生し、配列のバグを回避したと思いますが、600行のawkプログラムでスコープの問題のように見えます。私のバグを見つけるには、awkの配列スコープの理解を確認する必要があります。 この実例のawkコードを考えると... function foo(ga) { ga[1] = "global result" } garray[1] = "global" foo(garray) print garray[1] 印刷されます... global result 配列は常に参照によって関数に渡されるため、すべての配列は常にグローバルです。ローカル配列を作成する方法はありません。これは正しいです?明示的に言っているドキュメントを見つけることができませんでした。 私がデバッグしているので、3.1.6自体にこの領域の既知のバグがあるため、awkのバグがどこに留まり、自分のバグがどこから始まるのかを特定しようとしています。 補足:ga []が関数内で機能するのはなぜですか? まず、配列を関数に渡すことfoo(ga)は実際には不要です。garray[]関数内からアクセスするだけです。ただし、それを実行しても測定可能なパフォーマンスの低下はなく、デバッグとエラー報告に役立ちます。 を使用する場合foo(ga)、ga[]はグローバル配列の同義語ですgarray[]。のローカルコピーでgarray[]はgarray[]なく、シンボリックリンクがファイルへのポインターであるように、単にへのポインターであり、同じファイル(または配列)に複数の名前でアクセスできます。 補足:グレン・ジャックマンの回答の明確化 関数の外で作成された配列は関数に対してグローバルであり、関数に渡されるか、関数内で参照されるだけですが、関数内で作成された配列は実際には関数に対してローカルのままであり、関数の外からは見えません。ジャックマン氏の例を修正すると、これがわかります... awk ' function bar(x,y) { split("hello world", y) print "x[1] inside: " x[1] print "y[1] inside: " y[1] } BEGIN { …
9 awk  function  array 

1
同じ名前の既存のコマンドを呼び出す関数をzshで作成するにはどうすればよいですか?
zsh関数自体と同じ名前の既存のコマンドを呼び出す関数をどのように記述できますか?たとえば、私はこれを試して私の質問を説明しました: function ls { ls -l $1 $2 $3 } で実行するとls *、次のようになります。 ls:1: maximum nested function level reached これは関数が再帰的に呼び出されているためだと思います。どうすればそれを回避できますか? これは大まかな例であり、この場合はエイリアスで十分ですが、エイリアスが適切でないより複雑な例があるため、関数を作成する必要があります。
9 zsh  function 

4
anonとしてコードブロックを渡します。関数
コマンドのブロックを無名関数として扱うことは可能ですか? function wrap_this { run_something # Decide to run block or maybe not. run_something else } wrap_this { do_something do_somthing else } # Do something else wrap_this { do_something_else_else do_something_else_else_else } (ブロックごとに関数またはファイルを作成すると思いますが、このオプションは特定の状況でより明確で読みやすいと思います。) whileでそれを行いdo/done、でfunctionそれを行い{ multiple lines }ます。BASHには匿名関数がないことに気づきましたが、関数を定義するときに行うことができるように、複数のコマンドを別の関数に渡すことは可能whileですか?
9 bash  function 

3
シェル:ifでパラメーター付きの関数を使用する
以下のコードを実行しようとしていますが、ifステートメントで関数を使用しようとすると、-bash: [: too many argumentsエラーが発生します。なぜそれが起こっているのですか? 前もって感謝します! notContainsElement () { local e match="$1" shift for e; do [[ "$e" == "$match" ]] && return 1; done return 0 } list=( "pears" "apples" "bananas" "oranges" ) blacklist=( "oranges" "apples" ) docheck=1 for fruit in "${list[@]}" do if [ notContainsElement "$fruit" "${blacklist[@]}" -a …

2
zshでの関数の呼び出しコンテキスト:bash `caller`と同等
bashでは、私は書くことができます: caller 0 呼び出し元のコンテキストを受け取ります: 行番号 関数 スクリプト名 これはデバッグに非常に役立ちます。与えられた: yelp () { caller 0; } 次に、yelpどのコード行に到達しているかを確認するために書き込むことができます。 私が実装することができますcaller 0でbashのように: echo "${BASH_LINENO[0]} ${FUNCNAME[1]} ${BASH_SOURCE[1]" どのように私は同じ出力を得ることができますcaller 0ではzsh?

2
オプションの関数引数を検出(スカラー)
次のスクリプトについて考えてみましょう。 function alfa(bravo, charlie) { if (charlie) return "charlie good" else { return "charlie bad" } } BEGIN { print alfa(1, 1) print alfa(1, 0) print alfa(1, "") print alfa(1) } 結果: charlie good charlie bad charlie bad charlie bad Awkには、引数が提供されていないことを通知する方法がありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.