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

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

2
一部のコマンドの実行中に1つのプロセスからログを読み取る
ファイルにログを生成するサービスがありますlogs.log。 このサービスと対話する他のコマンドがあります。一部だとしましょうfoo.sh。 私が必要なのは、実行logs.log中にログを切り取って保存するfoo.shことです。言い換えると、サービスのログの一部が自分とやり取りするときに必要foo.shになります(そのため、foo.shのログは気にしません)。 このコマンドでうまくいくと思いますfoo.shが、すでに終了している場合でもファイルの読み取りを続けます。 > foo.sh | tail -f logs.log > foo_part.log このトリックを実行する良い方法はありますか?
10 bash  tail 

1
Bashのコマンドリストの残りをキャンセルするにはどうすればよいですか?
Bashでは、たまにコマンドのリストを入力してを押しますがEnter、後でリストの最後の方にあるコマンドに誤りがあることに気づきます。Ctrl+ を押すCと、現在実行中のコマンドが終了し、残りのリストがキャンセルされることがわかっています。現在実行中のコマンドを終了せずにリストの残りをキャンセルする方法はありますか? たとえば、次のように入力したとしましょう foo; bar または foo && bar where fooは、実行を中断しないことが非常に重要である長期実行コマンドであり、bar不可逆的で不要な処理を実行します(たとえば、shutdown -h nowまたはrm -rf /)。fooがまだ実行されている間に、シェルにfoo終了させるがbar後で実行しないように指示する一般的な方法はありますか?(はい、bar実行可能ではないようにアクセス許可を変更することはできますが、それまでの間使用したいbarような場合は特に便利ではrmありません。所有していないbar場合やbar組み込みの場合は機能しません。)

4
コマンドを見つけ、出力を列挙して選択を許可しますか?
を使用するとfind、多くの場合、次のような複数の結果が見つかります find -name pom.xml ./projectA/pom.xml ./projectB/pom.xml ./projectC/pom.xml 特定の結果のみを選択したい場合があります(例:)edit ./projectB/pom.xml。find出力を列挙し、別のアプリケーションに渡すファイルを選択する方法はありますか?お気に入り: find <print line nums?> -name pom.xml 1 ./projectA/pom.xml 2 ./projectB/pom.xml 3 ./projectC/pom.xml !! | <get 2nd entry> | xargs myEditor ? [編集]言及した解決策のいくつかを使って、いくつかの特異なバグにぶつかった。だから私は再現する手順を説明したいと思います: git clone http://git.eclipse.org/gitroot/platform/eclipse.platform.swt.git cd eclipse.platform.swt.git <now try looking for 'pom.xml' and 'feature.xml' files> [編集]解決策1 これまでのところ「nl」(列挙型出力)の組み合わせで、ヘッドとテールを組み合わせて関数にして$(!!)を使用すると機能するようです。 つまり: find -name pom.xml …
10 bash  files  find 

5
角括弧グロビングにおける大文字と小文字の区別
通常、bashグロビングでは大文字と小文字が区別されます。 $ echo c* casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py $ echo C* CarePackage.md ChocRippleCake.md Clips 角括弧を使用しても、これは変更されないようです。 $ echo [c]* casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py $ echo [C]* CarePackage.md ChocRippleCake.md Clips ハイフンが使用されている場合でも、変更されません。 $ echo [c-c]* casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py …
10 bash  shell  wildcards  locale 


3
X秒ごとにコマンドを実行する
コマンドを10秒ごとに実行し、それをバックグラウンドで実行したい(それによってwatch?を削除したい)。すべての回答は次のようなものを示していますが、これは常に11〜14秒実行されます。どうすればこれを達成できますか? while true; do # perform command that takes between 1 and 4 seconds sleep 10 done


1
グロブパターンから定義された変数によるバッシュ置換
以下の例は問題を説明しています。FILENAME置換を使用したときに、エコーされてパターンとして認識されたときに正しく印刷されるのはなぜですか? #!/bin/bash FILEPATH_WITH_GLOB="/home/user/file_*" FILENAME=$(basename "$FILEPATH_WITH_GLOB") echo $FILENAME #file_1234 echo ${FILENAME:1:5} #ile_* <---why is this not ile_1

1
OS X、bash:開いているファイル記述子では機能しませんが、猫では機能しません
私が取り組んでいるbashスクリプト(UbuntuとOS Xで実行する必要があります)では、何百ものコマンドの出力をファイルにリダイレクトする必要があります。それらすべてに 追加&>...するのではなく、単に exec 9>&1 exec 5<>/tmp/some-file.txt exec 1>&5 これまでのところ良好ですが、これらすべてのコマンドの途中で、ファイル記述子を開いたまま、これまでに書き込まれたすべてを読み取る必要があります。 今、Ubuntuで私は簡単にできます cat /dev/fd/5 または tee </dev/fd/5 ただし、OS Xでは何も出力されません(コマンドはすぐに終了します)。 ただし、less両方を使用してファイルの内容を確認できます。 私は使用することで上記の効果(両方のOSで動作する)を達成できます less /dev/fd/5 | tee しかし、それはハックのようです。 では、なぜOS X lessで表示catできないものを表示できるのでしょうか?(または、すべてのBSDの子孫が影響を受けますか?) または、何か間違ったことをしていますか?

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 

3
コマンド置換を変数置換にネストできますか?
コマンドを介してアクセスする特定の文字列に変数置換を使用したいと思います。たとえば、クリップボードに何かをコピーすると、次のようにアクセスできます。 $ xclip -o -selection clipboard Here's a string I just copied. これを変数に割り当てると、変数の置換を行うことができます。 $ var=$(xclip -o -selection clipboard) $ echo $var Here's a string I just copied. $ echo ${var/copi/knott} Here's a string I just knotted. しかし、変数に代入せずに変数置換を行う方法はありますか?概念的には、このようなものです。 $ echo ${$(xclip -o -selection clipboard)/copi/knott} bash: ${$(xclip -o -selection clipboard)/copi/knott}: bad substitution …

1
プロンプトをハイジャックせずにバックグラウンドプロセスから進行状況をエコー
簡単なスクリプトを考えてみましょうhello: #!/bin/bash echo 'hello world!' これをバックグラウンドで実行しようとすると、bashから: $ hello & [1] 12345 $ hello world! █ <--- prompt is stuck here until I hit enter! [1]+ Done $ █ <--- prompt back to normal 私がむしろ見たいもの: $ hello & [1] 12345 [1]+ hello world! [1]+ Done $ █ <--- prompt normal the …

2
設定されていない場合、先行コロンを作成せずにPATHのような変数に追加します
にディレクトリを追加する必要がありますPKG_CONFIG_PATH。通常、私は標準を使用します export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:$(pyenv prefix)/lib/pkgconfig しかし、PKG_CONFIG_PATH以前に私のシステム上で設定されていません。したがって、変数は:文字で始まり、現在のディレクトリを最初に検索するように指示します。それは欲しくない。私は以下に落ち着きました、 export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}${PKG_CONFIG_PATH:+:}$(pyenv prefix)/lib/pkgconfig しかし、それはとても醜いようです。もっと良い方法はありますか?変数がすでに設定されている場合にのみ、条件付きでコロンを追加する適切な方法は何ですか?

4
\\を使用する正規表現と\を使用する正規表現
どして grep e\\.g\\. <<< "this is an e.g. wow" そして grep e\.g\. <<< "this is an e.g. wow" 同じことをしますか? 3番目のスラッシュを追加すると、同じ結果になります。しかし、4番目のスラッシュを追加すると、機能しなくなります。これは、クラスの古い試験の質問に関係しています。2つのバックスラッシュのあるものは、「eg」で行を出力するために機能するかどうか尋ねましたが、最初は機能しないと思っていましたが、確認してみました。説明は何ですか?

1
history-正常に実行されたコマンドのみをリストします
historyコマンドを使用する方法はあるのでしょうか。ただし、正常に実行されたコマンドのみをリストします。同様に、エラーを生成したものをリストする方法はありますか? 各コマンドの終了ステータスは次のとおりです。 0-コマンドの正常な実行 1-拡張またはリダイレクト中のエラーのためにコマンドが失敗し、終了ステータスがゼロより大きい。 2-コマンドの使用法が正しくあり 12ません-コマンドは見つかりましたが実行可能ではありません 127-コマンドが見つかりません そして、次のコマンドでコマンドを実行echo $? して 確認できます:http : //www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html 例: これらの4つのコマンドを実行した後: ls help lss ls nonexistentfile 成功したコマンド(終了ステータス0)のみを出力するようにテストしてみましたが、これは「ls」と「help」だけであるはずです。 for j in `history | tail -5 | head -4 | cut -d ' ' -f5-`; do $j > cmd_out; if [[ `echo $?` != 0 ]]; then :; …

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