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

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

4
空の場合を除き、bash反復ファイルリスト
これは簡単だと思っていましたが、予想よりも複雑であることが判明しています。 ディレクトリ内の特定の種類のすべてのファイルを反復処理するため、次のように記述します。 #!/bin/bash for fname in *.zip ; do echo current file is ${fname} done これは、ディレクトリに一致するファイルが少なくとも1つある限り機能します。しかし、一致するファイルがない場合、私はこれを取得します: current file is *.zip 次に試しました: #!/bin/bash FILES=`ls *.zip` for fname in "${FILES}" ; do echo current file is ${fname} done ファイルがない場合、ループの本体は実行されませんが、lsからエラーが発生します。 ls: *.zip: No such file or directory 一致するファイルをまったく処理しないループを作成するにはどうすればよいですか?
33 bash  parameter 


2
「screen」内の出力をスクリプトに取得する方法は?
screenインスタンスを実行していますが、内でコードを実行しscreen、結果をスクリプトに取得する必要があります。 最初の部分は非常に簡単です、私はちょうどscreen -S session_name -X eval 'stuff "$cmd"\015'。 (スクリプトで見つけた行を変更しました) 出力を取得する2番目の部分は、より複雑です。サイズにかかわらず、出力全体を取得するにはどうすればよいですか?

2
なぜ `sort <(ls -l)`は機能するのに `sort <(ls -l)`は失敗するのですか?
今日、私はこの記事でFIFOについて何かを学んでいる:はじめに名前付きパイプに言及し、cat &lt;(ls -l)。 sort &lt; (ls -l)エラーを表示するを使用して、いくつかの実験を行いました。 -bash: syntax error near unexpected token `('` 次に、コマンドに余分なスペースを誤って追加したことがわかりました。 しかし、なぜこの余分なコマンドがこの失敗につながるのでしょうか?リダイレクトシンボルをに近づける必要があるのはなぜ(ですか?

1
ESC + {:それは何であり、どこでそれについてもっと知ることができますか?
私はbashプロンプトで遊んでいて、ESCを押してから{を押した後、シェルはfileglob文字列で完了のためのすべてのファイルを表示しました。例:もし私が入力したbash Cことで、その後ESC+{、シェルはこのことを示すだろう:bash CHECK{,1,2{,23{336{,66666},6},3{,6}}}すべての実験ファイルとディレクトリ私が作っていた示し、Cで始まるすべての可能なファイルとディレクトリを自動的に完了する。 それは何でありESC + {、私はそれについてもっと知ることができますか? これは、CENTOSおよびMac OSXでbashを使用して表示されます。



6
前のプログラムからの出力の行数を数える
特定のプログラムが生成する出力の行数をカウントしようとしています。問題は、プログラムの実行に時間がかかるため、ユーザーに出力を表示したいことです。最後のコマンドが出力した行数をカウントする方法はありますか? できますprogram | wc -lが、ユーザーに出力が表示されません。私の知る限り、やらなければならないことですprogram; program | wc -lが、プログラムの実行には少なくとも1分かかります。したがって、行数を一番下に表示するためだけに複数回実行する必要はありません。 編集: 出力を行ごとに表示し、最後にカウントを返す方法はありますか?

2
「<<(…)」リダイレクトとはどういう意味ですか?
次のコマンドを使用してrvm(rubyバージョンマネージャー)がインストールされていることを確認しました。 bash &lt; &lt;(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer ) だから私は理解して、我々はスクリプトの内容を取得し、bashのに渡す(私は信じている&lt; &lt;と&lt;&lt;?同じものである)私はに興味が&lt; &lt;一部、ネット上の説明の後が見つかりました: &lt;&lt; トークン手段は、トークンが見つかるまでプログラムのSTDINとして現在の入力ストリームを使用します。 これはどういうわけか私には明らかではありませんが、誰かが例を作ったり、より簡単な方法で説明したりできますか?

4
find -exec + vs find | xargs:どちらを選択しますか?
の動作を模倣-execする+オプションを選択できることを理解していますxargs。あるフォームを他のフォームよりも好む状況はありますか? 個人的には、パイプの使用を避けるためだけに、最初の形式を好む傾向があります。開発者はfind適切な最適化を行ったに違いない。私は正しいですか?
32 bash  find  pipe  xargs 

1
ファイル記述子とシェルスクリプト
シェルスクリプトでファイル記述子を使用する方法を理解するのは非常に困難です。 私は次のような基本を知っています exec 5 &gt; /tmp/foo したがって、書き込み用にfd 5がfooに添付されます。 exec 6 &lt; /tmp/bar …読書のため。 exec 5&gt;&amp;- …fdを閉じます。 今、これは何をしますか? #!/bin/bash exec 5 &gt; /tmp/foo exec 6 &lt; /tmp/bar cat &lt;&amp;6 | while read a do echo $a &gt;&amp;5 done 私は理解して&amp;5いるように、fdを閉じますので、各呼び出し後に出力がどのように正常にリダイレクトされていますか? これはからのコピーパスタです:ここ これをシンプルに使用echo $a &gt; fileすると、はるかに速くなると主張していますが、理解できません。適切なチュートリアルへのリンクをいただければ幸いです。私はグーグルパワーが私に失敗しているようだ。

3
findコマンドの-execで2つのbashコマンドを使用するにはどうすればよいですか?
コマンドの-exec一部で2つのコマンドを使用することは可能findですか? 私は次のようなものを試しました: find . -name "*" -exec chgrp -v new_group {} ; chmod -v 770 {} \; そして私は得る: find:-execの引数が ありませんchmod:アクセスできません{}:そのようなファイルまたはディレクトリはありません chmod:アクセスできません;:そのようなファイルまたはディレクトリはありません
32 bash  find 

2
パターンに一致するファイルを削除する
ファイル名に数字が含まれ、その後に「x」、数字が少なくとも2回含まれるすべてのサブディレクトリ内のすべてのファイルを再帰的に削除する必要があります。 例: これらのファイルを削除したい: 'aaa-12x123-123x12.jpg' 'aaa-12x12-123x12-12x123.jpg' しかし、私はこれらのファイルを削除したくありません: 'aaa.jpg' 'aaa-12x12.jpg' 'aaaxaaa-123x123.jpg' 'aaaxaaa-aaaxaaa.jpg' どうすればできますか(bashシェルから)
32 bash  files  find  wildcards 

5
getopt、getopts、または手動解析-短いオプションと長いオプションの両方をサポートする場合に使用するもの
現在、次の要件を持つBashスクリプトを作成しています。 さまざまなUnix / Linuxプラットフォームで実行する必要があります 短いオプションと(GNU)長いオプションの両方をサポートする必要があります 私はそれgetoptsが移植性の観点から好ましい方法になることを知っていますが、知る限りでは長いオプションをサポートしていません。 getopt長いオプションをサポートしますが、BashGuideはそれに対して強く推奨します: getopt(1)を使用しないでください。getoptは、空の引数文字列、または空白が埋め込まれた引数を処理できません。それが存在したことを忘れてください。 そのため、手動解析のオプションがまだあります。これはエラーが発生しやすく、かなりの定型コードを生成するため、自分でエラーを処理する必要がありgetopt(s)ます(自分でエラー処理を行うと思います)。 それで、この場合の好ましい選択は何でしょうか?

3
-eはbash shebangで何をしますか?
次のbashスクリプトがあります。 #!/bin/bash -e egrep "^username" /etc/passwd &gt;/dev/null if[ $? -eq 0 ] then echo "doesn't exist" fi このスクリプトは、-eなしでは実行されません。-eこのスクリプトでは何ができますか?また、$?このコンテキストでは何をしますか?
32 linux  bash 

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