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

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


4
ディレクトリと相対パスへのシンボリックリンク
ディレクトリへの絶対パス(Blink)でシンボリックリンクを作成しました。たとえば次のツリーがあります。 $ ls -l /tmp/A total 0 lrwxrwxrwx 1 root root 6 Apr 3 12:27 Blink -> /tmp/B -rw-r--r-- 1 root root 0 Apr 3 12:27 foo $ ls -l /tmp/B total 0 -rw-r--r-- 1 root root 0 Apr 3 12:27 bar 次に/ tmp / Aに移動し、ディレクトリをBlinkに変更します。 $ cd /tmp/A $ …

2
:とtrueの違いは何ですか?
でbash: $ type : : is a shell builtin $ type true true is a shell builtin それらは同じように見えますが、同じシステムトレースを提供しません。 $ strace : strace: :: command not found $ strace true execve("/bin/true", ["true"], [/* 82 vars */]) = 0 [snip] exit_group(0) = ? とを比較strace bash -c : 2>:.txtしてみましstrace bash -c true 2>true.txtたが、メモリの場所を除いて両者の違いを見つけることができませんでした。 …
15 bash  dash 

1
文字列補完を標準出力に出力する方法は?
一部のgitコマンドには多くのオプションがあり、必要なものを検索すると便利な場合があります。TAB幅を制御するオプションを探していましたgit-guiが、には約200の補完がありgit configます。明らかな回避策は、すべての補完をエディターにコピーして検索することですが、私はむしろ [something] | grep tab 、manまたはのinfoページはcompgenありhelp compgenません。独自のオプションについても説明していません。また、オートコンプリートもありませんcompgen(皮肉なのはどうですか?)。 PS:compgen -A動作しません。 PPS:これは質問ではありませんgit-gui- タブ幅の質問に対する解決策は他の場所にありました。 PPPS:これはコマンドの自動補完ではなく、コマンドパラメータのみです。

4
クリップボードからvi対応のzshまたはbashシェルに貼り付ける
キーボードを使用して、システムクリップボード(またはテキスト選択)から「viに似た」シェルプロンプトに貼り付けることができます。私は通常zshを使用し、時にはbashを使用します。どちらの場合も、viのような動作(bindkey -v/ set -o vi)でシェルをセットアップしています。 vimでは、私が探している動作はキーシーケンスで利用可能です"+p。ただし、この特定のキーシーケンスは、vi対応のシェルプロンプトでは期待どおりに機能しません。zshまたはbashシェルプロンプトでviのようなキーバインドを維持しながら、キーボードのみを使用してこれまたは同様の動作を有効にする方法はありますか? -編集- 使用例:私は、Pentadactylアドオン、ターミナルエミュレーター、vimを使用して、Firefoxの間を頻繁に移動します。Xmonadウィンドウマネージャーとカスタムキーを使用して移動します。3つのプログラムはすべてviに似たキーバインドを備えており(「フィンガーメモリ」の場合)非常に効率的であるため、vim構文(または非常に類似した構文)のみを使用してプログラム間でテキストを通信することが理想的です。
15 bash  shell  zsh  vi  clipboard 


5
BashでN回のうち1回コマンドを実行する方法
コマンドをランダムに実行する方法、たとえば10回のうち1回が必要です。これを行うための組み込みまたはGNU coreutilはありますか?理想的には: chance 10 && do_stuff do_stuff10回に1回しか実行されないのはどこですか?スクリプトを記述できることは知っていますが、それはかなり単純なことのように思え、定義された方法があるかどうか疑問に思っていました。


3
コード「{exec> / dev / null; }> / dev / null」内部で何が起きているのでしょうか?
execリダイレクションを含むコマンドリストをリダイレクトする場合、exec> / dev / nullは後で適用されるようには見えません: { exec >/dev/null; } >/dev/null; echo "Hi" 「こんにちは」と印刷されます。 {}コマンドリストはパイプラインの一部でない限り、サブシェルとは見なされないためexec >/dev/null、現在のシェル環境内でコマンドリストを適用する必要があるという印象を受けました。 これを次のように変更すると: { exec >/dev/null; } 2>/dev/null; echo "Hi" 期待どおりの出力はありません。将来のコマンドでも、ファイル記述子1は/ dev / nullをポイントしたままです。これは再実行によって示されます: { exec >/dev/null; } >/dev/null; echo "Hi" 出力されません。 私は台本を作ってそれを追跡しようとしましたが、ここで何が起こっているのか正確にはわかりません。 このスクリプトの各ポイントで、STDOUTファイル記述子はどうなりますか? 編集:私のstrace出力の追加: read(255, "#!/usr/bin/env bash\n{ exec 1>/de"..., 65) = 65 open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = …

1
パターンが見つからないときにシェルスクリプトからの早期終了を防ぐための「set -e」および「grep」イディオム
必要なヘルプ-GNU / LINUX bashでのシェルスクリプトのコンテキストで: 私はいつも使用しますset -e。多くの場合、パターンが見つからないことを示す終了ステータスがあるgrep場合、スクリプトの実行を終了させたいとは思わないでしょう。grep1 この問題を解決しようとしたのは次のとおりです。 (Iを試してみてください) の場合set +o pipefailと同様なものとgrepの呼び出しgrep 'p' | wc -l将来のメンテナが有効になるまで、私は目的の動作を取得しますpipefail。また、有効にするのpipefailが好きなので、これはうまくいきません。 (IIしてみてください) を使用しsed、またはawkその後、およびのみパターンに一致する行を印刷wcマッチしたパターンのための試験に適合ライン。sedto を使用することgrepは私の本当の問題の回避策のように思えるので、私はこのオプションが好きではありません。 (トライIII) これは私の一番好きではありません-次のようなものです:set +e; grep 'p'; set-e どんな洞察/イディオムも最も高く評価されるでしょう-ありがとう。
15 bash  grep  gnu  coreutils 

1
bashショートカットでCtrl + mとCtrl + qが使用されないのはなぜですか?
最近、bashのショートカットキーを確認し、tmuxのアクティベートキーに適したものを見つけようとしています。 面白いと思う ctrl + mhttps://en.wikipedia.org/wiki/Bash_(Unix_shell)ctrl + qによると、bashショートカットでは使用されておらず、です。 なぜ使用されないのですか?ctrl + mとても便利だと思います。 これらの2つの組み合わせは、DIY (define it yourself)使用目的で設計されていますか?それとも別の話がありますか?

3
後で使用するために終了コードを保存
そのため、いくつかのテストを実行するための小さなスクリプトがあります。 javac *.java && java -ea Test rm -f *.class ここでの問題は、スクリプトを実行する./testと、テストがrm -f *.class成功したために失敗した場合でも、成功の終了コードを返すことです。 私が望んでいることを実現することを考えることができる唯一の方法は、私にとってい感じです: javac *.java && java -ea Test test_exit_code=$? rm -f *.class if [ "$test_exit_code" != 0 ] ; then false; fi しかし、これは一般的な問題のように見えます-タスクを実行し、クリーンアップしてから、元のタスクの終了コードを返します。 これを行う最も慣用的な方法は何ですか(bashまたは一般的なシェルのみ)?

1
bash配列値を参照するときの@と*の違いは何ですか?
このBashガイドには次のように書かれています。 インデックス番号が@または*の場合、配列のすべてのメンバーが参照されます。 私がこれを行うとき: LIST=(1 2 3) for i in "${LIST[@]}"; do echo "example.$i " done 与える:(example.1 example.2 example.3望ましい結果)。 しかし、を使用すると${LIST[*]}、example.1 2 3代わりに取得します。 どうして? 編集:printfを使用すると、@と*は実際に同じ結果になります。
15 bash  array 


3
「echo $ 0」が2つの異なる端末に対して異なる結果を与えるのはなぜですか?
ディレクトリに移動して右クリックし、「ターミナルで開く」を選択して、Ctrl+ Alt+ Tと別のターミナルを使用してUbuntu でターミナルを開きました。 私はecho $0両方の場合でした。 最初の場合: $ echo $0 -bash 2番目の場合: $ echo $0 /bin/bash なぜこの違いがありますか?

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