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

他のBourne / POSIXシェルとは対照的に、GNUのBourne Again SHellに固有の質問。Unixシェル全般に関する質問については、代わりに/ shellタグを使用してください。

2
位置パラメータ付きのbash -c
通常、$0スクリプト内では、スクリプトの名前、またはそれが呼び出されたもの(パスを含む)に設定されます。ただし、オプションで使用bashする場合は、コマンド文字列の後に渡される引数の最初に設定されます。-c$0 bash -c 'echo $0 ' foo bar # foo 実際には、位置パラメータはシフトされているように見えますが、が含まれてい$0ます。ただしshift、コマンド文字列では$0(通常どおり)影響を受けません。 bash -c 'echo $0; shift; echo $0 ' foo bar # foo # foo コマンド文字列のこの奇妙な動作はなぜですか?このような奇妙な動作を実装する背後にある理由、理論的根拠を探していることに注意してください。 そのようなコマンド文字列は$0通常定義されたパラメータを必要としないと推測できるため、経済のために通常の引数にも使用されます。ただし、その場合、の動作shiftは奇妙です。別の可能性は$0、プログラムの動作を定義するために使用される(bashas shまたはvimas と呼ばれるla vi)が、$0ここではコマンド文字列でのみ表示され、その中で呼び出されるプログラムでは表示されないためです。の他の用途は考えられない$0ので、これを説明するのに途方に暮れています。
15 bash 

4
ディレクトリ内のファイルを再帰的に繰り返す
ディレクトリ内のファイルの再帰的な反復は、次の方法で簡単に実行できます。 find . -type f -exec bar {} \; ただし、上記は、多くの条件分岐、ループなどを行う必要があるより複雑なものには機能しません。私はこれを上記に使用していました。 while read line; do [...]; done < <(find . -type f) ただし、これはあいまいな文字を含むファイルでは機能しないようです: $ touch $'a\nb' $ find . -type f ./a?b そのようなあいまいな文字をうまく処理する代替手段はありますか?

3
コマンド履歴リコールの数を設定する方法
私はbashを使用しています。コマンド履歴を閲覧するにhistoryは、同じ名前のGnuプログラムを呼び出していると思われるコマンドを呼び出しています。(bash固有のより良い方法があるかどうかはわかりません)。 現在、.bashrcには、export PROMPT_COMMAND='history -a'実行中の複数のbashセッションの履歴を保存する行があります。 履歴を作成すると、現在524エントリしか表示されません。これは構成可能ですか?これをもっと大きな数、たとえば2000に増やしたいと思います。

5
システムがアイドル状態で、再びアクティブになったときにコマンドを実行する
ユーザーが非アクティブになった(システムがアイドル状態になった)ときにコマンドを実行したい。例えば: echo "You started to be inactive." また、ユーザーが再びアクティブになったとき(システムはもうアイドル状態ではありません): echo "You started to be active, again." これを行うシェルスクリプトが必要です。これはタイマー/インターバルなしで可能ですか?たぶんいくつかのシステムイベント?
15 linux  bash  shell 


1
関数パラメーターによって提供されるコマンドを実行する
パラメーターによってメソッドに提供されるコマンドを実行するbashスクリプトで関数メソッドを作成しようとしています。 次のような意味: special_execute() { # Some code # Here's the point where the command gets executed $@ # More code } special_execute echo "abc" 私はすでに私が試した$@、"$@"、$*、"$*"私はそれをどのように行うことができますか?

3
bashスクリプトエラーstty:標準入力:デバイスの不適切なioctl
パスワードが何度も必要なインストールとセットアップを自動化するために、bashスクリプトでヒアドキュメントを使用しています。パスワードを1回入力すると、スクリプトはそれをさまざまなコマンドに渡します。ほとんどの場合、ヒアドキュメントアプローチがこの罰金を処理します。ただし、ある場合にはこのエラーが発生します。 Enter VNC password: stty: standard input: Inappropriate ioctl for device Verify password: stty: standard input: Inappropriate ioctl for device このエラーメッセージはx11vnc -storepassword(ではなく)からのものであることに注意してくださいsudo。 私の問題は関連してx11vnc -storepasswdおり、ここに私のコードがあります: sudo x11vnc -storepasswd ~/.vnc/passwd << ENDDOC password password y ENDDOC それは明らかに(エラーから)動作しません。sudo x11vnc -storepasswd ~/.vnc/passwdスクリプトに実装する方法の実用例に感謝します。 役立つ場合、プロンプトは次のようになります。 VNCパスワードの入力:パスワードの 確認: /home/user/.vnc/passwdにパスワードを書き込みますか?[y] / nn 使用expectする方が良い解決策でしょうか?もしそうなら、この場合どのように使用しますか?(これまで使用expectしたことはありませんが、この質問を投稿してから多くの例を見てきましたexpect。自分で作業することはできません。)

3
シェルスクリプトでstderrへのリダイレクトを使用する場合
grepのような行儀の良いユーティリティは、stdoutに「通常の」メッセージを、stderrにエラーメッセージを出力することを知っています。 $ grep '^foo' file1 file2 file1:foo grep: file2: No such file or directory シェルスクリプトを自分で書いているとき、stderrにどの出力とメッセージを表示するか、または気にする必要があるかどうかを判断するのが難しいことがよくあります。 私は良い習慣について知りたいです:いつメッセージをstderrにリダイレクトするのが適切であり、そうでないのか? 「依存します」は確かですが、これらの決定を下すのに役立つ洞察はありますか? この主観的な質問を形式に合うようにするために、「なぜ」に対処し、経験と可能であれば事実に裏打ちされた情報が得られる答えを奨励したいと思います。

5
スクリプトのシバンラインに複数の可能性を持たせるにはどうすればよいですか?
さまざまな環境(およびPATH)を持ち、さまざまなLinuxシステムでさまざまなユーザーが理論的に実行できるPythonスクリプトがあるという興味深い状況に少しあります。このスクリプトは、人為的な制限なしにこれらの可能な限り多くで実行できるようにします。既知のセットアップを次に示します。 Python 2.6はシステムのPythonバージョンであるため、python、python2、およびpython2.6はすべて/ usr / binに存在します(同等です)。 Python 2.6は上記のシステムPythonバージョンですが、Python 2.7はpython2.7としてインストールされます。 Python 2.4はシステムのPythonバージョンであり、私のスクリプトではサポートされていません。/ usr / binには、同等のpython、python2、python2.4、およびスクリプトがサポートするpython2.5があります。 これら3つすべてで同じ実行可能なPythonスクリプトを実行したいと思います。最初に/usr/bin/python2.7を使用し、存在する場合は、/ usr / bin / python2.6にフォールバックし、次に/usr/bin/python2.5にフォールバックしてから、それらのどれも存在しなかった場合、単にエラーになります。ただし、可能な場合は正しいインタープリターの1つを見つけることができる限り、可能な限り最新の2.xを使用してハングアップしません。 私の最初の傾向は、シェバンラインを次のように変更することでした。 #!/usr/bin/python に #!/usr/bin/python2.[5-7] これはbashで正常に機能するためです。ただし、スクリプトを実行すると次のことができます。 /usr/bin/python2.[5-7]: bad interpreter: No such file or directory さて、bashでも機能する次のことを試してみてください: #!/bin/bash -c /usr/bin/python2.[5-7] しかし、再び、これは失敗します: /bin/bash: - : invalid option もちろん、正しいインタープリターを見つけて、見つかったインタープリターを使用してpythonスクリプトを実行する別のシェルスクリプトを作成することもできます。最新のpython 2インタープリターをインストールして実行する限り、1つで十分な2つのファイルを配布するのは面倒です。インタプリタを明示的に呼び出す(たとえば、$ python2.5 script.py)ように人々に依頼することは選択肢ではありません。特定の方法で設定されているユーザーのPATHに依存することもオプションではありません。 編集: Python 2.6の時点で存在する(with …
15 bash  scripting  python 

4
ホイップテールまたはダイアログ
ユーザー入力を使用するスクリプトを作成するため、ホイップテールを使用することにしましたが、ポータブルでubuntu 10.x以上およびCentOs5.x以上で動作するものを少し混乱させます。 私は知ってreadいますが、ツールのようなダイアログが欲しいので、誰かが他の選択肢を知っているなら、私に知らせてください。

7
フォルダー内の4番目のファイルごとにコピーする方法
という名前のフォルダーに多くのファイルがあります00802_Bla_Aquarium_XXXXX.jpg。ここで、4番目のファイルごとにサブフォルダーにコピーする必要がありますselected/。 00802_Bla_Aquarium_00020.jpg <= this one 00802_Bla_Aquarium_00021.jpg 00802_Bla_Aquarium_00022.jpg 00802_Bla_Aquarium_00023.jpg 00802_Bla_Aquarium_00024.jpg <= this one 00802_Bla_Aquarium_00025.jpg 00802_Bla_Aquarium_00026.jpg 00802_Bla_Aquarium_00027.jpg 00802_Bla_Aquarium_00028.jpg <= this one 00802_Bla_Aquarium_00029.jpg どうすればいいですか?
15 bash  files  cp 

2
一時的に使用するためのクリーンなシェル環境を作成するにはどうすればよいですか?
私は、Unixに焦点を当てた人気のQ&Aサイトで頻繁に回答し、多くの回答でbashシェルを使用した例を提供しています。ただし、これを行うたびに、クリーンな環境を作成するプロセスを手動で実行して、すべての手順が説明され、文書化されていることを確認する必要があります。このプロセスをより簡単にするにはどうすればよいですか?理想的には、1つのコマンドを入力してクリーンな環境を取得し、その一時的な環境の痕跡をすべて完了後に削除することを考えています。


2
グロビングを使用する場合にのみrmをインタラクティブにできますか?(bash、zsh、またはその両方で)
たびに私rmシェルがグロブと少しでも可能性パターンが膨張し、私はそれが期待する以上のことがありますと一度に複数の項目、私はいつも追加することを忘れないようにしようとし-iたが、(もちろん)私は忘れ、誤って有益な何かを吹き飛ばすことができます。エイリアスを使用してこの問題を解決しようとする人もいますが、alias rm='rm -i'rmを常に対話型にするという考えは嫌い-fです。 私がやりたいのは、グロビングを使用rmする-iときにのみ使用し-f、もちろんオーバーライド-iすることrm -rf junkです。そのため、通常のでディレクトリ全体を吹き飛ばすことができます。 したがってrm *blah*、実際にはそうですrm -i *blah*がrm blah、入力したとおりに動作します。 異なるシェルでこれを達成する方法に違いがある場合、どちらか一方のみをカバーする回答よりもbash と zshの両方のメソッドを提供する回答を選択します。 注:私は実際にこれは必ずしも良いアイデアです確信していません。私はそれが可能かどうかを尋ねているだけです。これが馬鹿げた考えだと思うなら、あなたの意見の背後にある理由を聞いてとてもうれしいでしょうが、そのようなコメントを回答フィールドに投稿しないでください。本当の答えは、これを行う方法を教えてくれるか、それが不可能な理由を説明します(または、同様の結果を得るための代替方法を提供する可能性があります)。しかし、なぜこれが愚かであるかを私に伝えたい場合は、コメントとして投稿してください。結論に同意しなくても、理にかなったコメントを支持します。
15 bash  zsh  wildcards  rm 

1
式で$なしの変数展開が機能するのはなぜですか?
#!/bin/bash VALUE=10 if [[ VALUE -eq 10 ]] then echo "Yes" fi 驚いたことに、これは「はい」を出力します。私はそれが必要になると期待していたでしょう[[ $VALUE -eq 10 ]]。のCONDITIONAL EXPRESSIONSセクションをスキャンしましたがman bash、この動作を説明するものが見つかりませんでした。

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