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

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

14
Bashでは、いつエイリアスを作成し、いつスクリプトを作成し、いつ関数を作成するのですか?
この質問をするのに、ほぼ10年間のLinuxの使用が必要でした。それはすべて試行錯誤とランダムな深夜インターネットサーフィンでした。 しかし、人々はこのために10年を必要としないはずです。Linuxを使い始めたばかりの場合、知りたいのは、エイリアスを作成するタイミング、スクリプトを作成するタイミング、関数を作成するタイミングです。 エイリアスに関しては、引数をとらない非常に簡単な操作にエイリアスを使用します。 alias houston='cd /home/username/.scripts/' それは明らかです。しかし、これを行う人もいます: alias command="bash bashscriptname" (そして.bashrcファイルに追加します) それをする正当な理由はありますか?私は一生懸命努力していますが、それをやりたいと思う状況はまったく考えられません。それで、それが違いを生むエッジケースがあるならば、以下に答えてください。 それが、私が自分のPATHとchmod +xそれに何かを入れる場所だからです。 次のトピックに進みます。例えば、私は、隠しフォルダ(追加.scripts/ちょうど私に行を追加することで、私のPATHにホームディレクトリ内の).bashrc(PATH=$PATH:/home/username/.scripts/)ので、そこに実行可能なものは自動的に自動的に補完します。 必要な場合。 私は本当にそれを必要としませんが、私は?Pythonのようなシェルではない言語に対してのみ使用します。 それがシェルの場合、まったく同じ内部に関数を書くことができます.bashrc: funcname () { somecommand -someARGS "$@" } 私が述べたように、私は試行錯誤を通してこれの多くを見つけました。そして、私のコンピューターが死んだときだけ、機能の美しさを本当に見ました。そして、彼らが使用していないとき、私は周りの人々のコンピューターを使用せざるを得ませんでした。 スクリプトのディレクトリ全体をコンピューターからコンピューターに移動する代わりに、他のすべての.bashrcを自分のものに置き換えるだけになりました。 しかし、私は何かを見逃しましたか? それでは、エイリアスを作成するタイミング、スクリプトを作成するタイミング、関数を作成するタイミングについて、初心者のLinuxユーザーに何を伝えますか? 明らかでない場合、これに答える人々は3つのオプションすべてを利用すると仮定しています。エイリアスのみを使用するか、スクリプトのみを使用するか、関数のみを使用する場合、またはエイリアスとスクリプト、またはエイリアスと関数、またはスクリプトと関数のみを使用する場合、この質問は実際には対象ではありません。


5
「関数foo(){}」と「foo(){}」の違い
キーワードbashを使用または省略して、関数を定義できますfunction。違いはありますか? #!/bin/bash function foo() { echo "foo" } bar() { echo "bar" } foo bar 関数の呼び出しfooとbar成功の両方で、違いは見当たりません。だから、読みやすさを改善するだけなのか、それとも私が見逃しているものがあるのか​​疑問に思っています... BTW dash(debian / ubuntuに/bin/shシンボリックリンクさdashれています)などの他のシェルでは、functionキーワードを使用すると失敗します。
96 bash  shell  function  posix 

8
bashで関数を「エクスポート」できますか?
source some_file some_file: doit () { echo doit $1 } export TEST=true some_fileをソースとする場合、コマンドラインで関数「doit」と変数TESTを使用できます。ただし、このスクリプトの実行: script.sh: #/bin/sh echo $TEST doit test2 TESTの値を返しますが、不明な関数「doit」に関するエラーを生成します。 関数も「エクスポート」できますか、それともscript.shでsome_fileをソースにして、そこで関数を使用する必要がありますか?
81 bash  function 

12
関数でbashスクリプト全体を記述する理由
職場では、bashスクリプトを頻繁に記述しています。私のスーパーバイザーは、次の例のように、スクリプト全体を機能に分割することを提案しています。 #!/bin/bash # Configure variables declare_variables() { noun=geese count=three } # Announce something i_am_foo() { echo "I am foo" sleep 0.5 echo "hear me roar!" } # Tell a joke walk_into_bar() { echo "So these ${count} ${noun} walk into a bar..." } # Emulate a pendulum clock for a bit …

3
新しいエイリアスと関数を定義した後、エイリアスと関数を更新しますか?
.bash_aliasesファイルに新しいエイリアスまたはファイルに新しい関数を定義するとき.bashrc、ターミナルを閉じることなく新しいエイリアスまたは関数をすぐに使用できるリフレッシュコマンドがあります(私の場合、いくつかのタブが開いているxfce4-terminal、多くのファイルが開いていますそして仕事の途中で)?


8
bash関数を使用してコマンドラインで簡単な計算を行う:$ 1を$ 2で除算(おそらくbcを使用)
ある数字を別の数字で割る必要がある場合があります。このためにbash関数を定義することができれば素晴らしいと思います。これまでのところ、私は次のような式を使用することを余儀なくされています echo 'scale=25;65320/670' | bc しかし、次のような.bashrc関数を定義できたら素晴らしいと思います divide () { bc -d $1 / $2 }

4
シェル関数のローカル変数の範囲
24.2を読んだ後。ローカル変数、varキーワードで変数を宣言するlocalことvarは、関数の波括弧で区切られたコードブロック内でのみ値にアクセスできることを意味すると考えました。 ただし、次の例を実行した後、私はそれが判明var読み、またアクセスすることができ、関数から書かれたコードのブロックによって呼び出される-すなわちたとえvar宣言されているlocalにouterFunc、innerFuncまだそれを読んで、その値を変更することができます。 Run It Online #!/usr/bin/env bash function innerFunc() { var='new value' echo "innerFunc: [var:${var}]" } function outerFunc() { local var='initial value' echo "outerFunc: before innerFunc: [var:${var}]" innerFunc echo "outerFunc: after innerFunc: [var:${var}]" } echo "global: before outerFunc: [var:${var}]" outerFunc echo "global: after outerFunc: [var:${var}]" 出力: global: before outerFunc: [var:] …

3
関数はBashのサブプロセスとして実行されますか?
で高度なバッシュ・スクリプトガイドで例27-4、下から7番目のライン、私はこれを読みました: 関数はサブプロセスとして実行されます。 Bashでテストを行ったところ、上記の記述は間違っているようです。 このサイト、Bash Man、および私の検索エンジンでの検索では、何の効果もありません。 答えはありますか、説明したいですか?
28 bash  process  function 

4
cdのラッパーを書くときにcd“ $ 1”の代わりにcd“ $ @”を使用する必要があるのはなぜですか?
他の場所では、次のようにcd関数を見ました: cd() { builtin cd "$@" } $@代わりに使用することが推奨されるのはなぜ$1ですか? テストディレクトリ「r st」を作成し、この関数を含むスクリプトを呼び出しましたが、どちらの方法でも機能しました $ . cdtest.sh "r st" しかし、 $ . cdtest.sh r st私が使用するかどうか失敗しました"$@"か"$1"

4
find -exec呼び出しでのユーザー定義関数の実行
私はSolaris 10を使用していますが、ksh(88)、bash(3.00)、およびzsh(4.2.1)で以下をテストしました。 次のコードは結果を生成しません。 function foo { echo "Hello World" } find somedir -exec foo \; (交換することによって示されるように検索には、いくつかのファイルが一致しない-exec ...と-print)、およびから外部に呼び出されたときに機能が完璧に動作findコール。 man findページの内容は-exec次のとおりです。 -exec command実行されたコマンドが 終了ステータスとしてゼロ値。の終わり コマンドはエスケープされた セミコロン(;)。コマンド引数{}は 現在のパス名に置き換えられます。もし -execの最後の引数は{}であり、あなたは セミコロン(;)ではなく+を指定します。 コマンドの呼び出し回数が少ない {}はパス名のグループに置き換えられました。もし コマンドを呼び出すと、 終了ステータスとしてゼロ以外の値、検索 ゼロ以外の終了ステータスを返します。 私はおそらくこのようなことをして逃げることができます: for f in $(find somedir); do foo done しかし、私はフィールドセパレーターの問題に対処することを恐れています。 呼び出しからシェル関数(同じスクリプトで定義され、スコープの問題に煩わされないようにする)をfind ... -exec ...呼び出すことは可能ですか? 私は両方でそれを試してみました/usr/bin/findし、/bin/findそして同じ結果を得ました。

2
bashのexport -fと同等のzshは何ですか
だから私は使い始めましたzsh。大丈夫です。非常にクールと滑らかなようで、現在の作業ディレクトリと実際のコマンドラインは、異なるライン上にあるという事実はいいですが、同時に、私は気づいzshビットより遅いことができbash、にテキストを印刷する場合は特に画面。 私が一番気に入ったのは、でzsh定義したすべての関数と「下位互換性」があるという事実でした.bashrc。 1つ不満です。これらの機能はすべて完全に機能しますが、エクスポートシステムがどのように機能するかはわかりません。 これらの.bashrc関数の一部をエクスポートして、スクリプトや外部プログラムなど、他の場所で使用できるようにしましたexport -f。 zshでは、エクスポートについても言及されていないようです。自動ロードですか?これらの2つのことは同じですか?私はそれを理解するのに非常に苦労しています。

6
シェルで.bash_profile / .profile / bashrcに関数を追加する方法は?
エポック時間を日付に変換する関数があります。定義はこちら date1(){ date -d @$1 } 私が書きたいのは: $ date1 xxxyyy ここで、xxxyyyは関数に渡すパラメーターであるため、対応する日付を取得できます。私はどちらかでそれを追加する必要があります理解し.bash_profile、.profileあるいは.bashrc、それをソース: $ source file しかし、どのファイルを入れるかわからない。現在、私はそれを持っている.profile。しかし、それを実行するには、source .profile毎回実行する必要があります。 理想的には、コンピューターが環境変数のように起動したときに、それを使用可能にする必要があります。
24 bash  shell  function  profile 

6
Sudoを使用したBashスクリプト関数の実行
さまざまな処理を行うスクリプトがありますが、そのほとんどは特別な特権を必要としません。ただし、関数内に含まれている特定のセクションには、ルート権限が必要です。 スクリプト全体をルートとして実行する必要はありません。スクリプト内からルート権限でこの関数を呼び出すことができるようにしたいと考えています。とにかくインタラクティブであるため、必要に応じてパスワードを要求することは問題ではありません。ただし、を使用しようとするとsudo functionx、次のようになります。 sudo: functionx: command not found 予想通り、export違いはありませんでした。いくつかの理由で、関数を分割して個別のスクリプトとして実行するのではなく、スクリプト内で関数を直接実行できるようにしたいと思います。 関数を抽出せずにsudoに「表示」し、適切なディレクトリを見つけて、それをスタンドアロンスクリプトとして実行する方法はありますか。 この関数はそれ自体が1ページの長さであり、二重引用符と単一引用符で囲まれた複数の文字列を含んでいます。また、メインスクリプトの他の場所で定義されているメニュー関数にも依存しています。 sudo ANYを持っている人だけが関数を実行できると期待します。それは、パスワードを変更することの1つです。
22 bash  sudo  function 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.