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

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

2
特定のコマンドにカスタムオートコンプリートを指定する方法は?
ダブルタブで表示するものをbashに正確に知らせる方法はありますか?たとえばscpy、2つの引数が必要なpythonスクリプトがあります。たとえばapt-get、ダブルタブを使用すると、 autoclean build-dep clean dselect-upgradeパージソースのアップグレード autoremove check dist-upgrade install remove update あなた自身のスクリプト/プログラムのためにそれを行う方法はありますか?Pythonスクリプトをbashスクリプトでラップする必要がありますか?

2
順序付けされたSTDOUT / STDERRをキャプチャし、タイムスタンプ/プレフィックスを追加する方法は?
ほぼすべての 利用可能な 同様の 質問を調査しましたが、役に立ちません。 問題について詳しく説明します。 私はいくつかの無人スクリプトを実行し、これらは標準出力と標準エラー行を生成できます。端末エミュレータで表示される正確な順序でそれらをキャプチャし、「STDERR:」や「STDOUT:」などのプレフィックスを追加します。 私はパイプを使用してみましたが、それらにエポールベースのアプローチさえ使用しませんでした。解決策はptyの使用法にあると思いますが、私はマスターではありません。また、GnomeのVTEのソースコードを覗きましたが、それほど生産的ではありませんでした。 理想的には、これを実現するためにBashの代わりにGoを使用しますが、できませんでした。パイプは、バッファリングのために正しい行順序を維持することを自動的に禁止しているようです。 誰かが似たようなことをすることができましたか?それとも、単に不可能ですか?ターミナルエミュレーターがそれを行うことができる場合、それはできないと思います-PTY(s)を異なる方法で処理する小さなCプログラムを作成することによるのでしょうか? 理想的には、非同期入力を使用してこれら2つのストリーム(STDOUTおよびSTDERR)を読み取り、2番目に必要に応じて再印刷しますが、入力の順序は重要です! 注:stderredは認識していますが、Bashスクリプトでは機能せず、プレフィックスを追加するために簡単に編集できません(基本的に多くのsyscallをラップするため)。 更新: 2つの要点の下に追加 混合stdout / stderrを生成するプログラム例 上記のプログラムから期待される出力 (一貫した結果を証明するために、提供したサンプルスクリプトに1秒未満のランダムな遅延を追加できます) 更新:この質問に対する解決策は、@ Gillesが指摘したように、この他の質問も解決します。しかし、私は、あちこちで尋ねたことをすることは不可能であるという結論に達しました。使用する場合2>&1、両方のストリームを正しくPTY /管のレベルでマージされているが、別々にストリームと1つが実際のアプローチを使用する必要があり、正しい順序で使用するstderredを involesシステムコールをフックとして見ることができるダーティ多くの方法です。 誰かが上記を反証できるなら、私はこの質問を更新したいと思っています。

2
>>と> \>演算子の違いは?
RHEL 6 >>and >\>演算子に違いはありますか?RHELトレーニングブックで次の宣伝文を読みました。 「次のようなコマンドを使用すると、二重リダイレクト矢印を使用して、既存のファイルの最後に標準出力を追加できます。 ls >\> filelist 私は>>オペレーターに慣れており、両方を試してみると異なる結果が得られます。 を使用する>>と、それに続くファイルに出力が追加されるようです(予想どおり)。 を使用>\>すると、文字どおりファイルに出力が追加されるようです> これは私が読んでいる本の間違いですか?または、著者のポイントが欠落していますか?
25 bash  rhel 

2
bashのwhileループ条件を否定する
私が取り組んでいるスクリプトの一部では、入力したIPアドレスが正しい形式であることを検証したいと思います。入力形式が正しくないときにループを作成したい。以下は、フォーマットが正しい間、ループに対して機能します。 while [[ $range =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]] do どうすればこのフォーマットに適合しないと言えますか。私は期待していた!=~仕事だろうが、私は構文エラーを取得しています。
25 bash 


3
サブシェルにいるかどうかを検出するにはどうすればよいですか?
exitビルトインの機能を置き換える関数を作成して、端末を終了できないようにしています。 SHLVL環境変数を使用しようとしましたが、サブシェル内では変更されないようです: $ echo $SHLVL 1 $ ( echo $SHLVL ) 1 $ bash -c 'echo $SHLVL' 2 私の機能は次のとおりです。 exit () { if [[ $SHLVL -eq 1 ]]; then printf '%s\n' "Nice try!" >&2 else command exit fi } exitただし、これによりサブシェル内で使用することはできません: $ exit Nice try! $ (exit) Nice try! 私がサブシェルにいるかどうかを検出する良い方法は何ですか?
24 bash  shell  exit  subshell 

3
/ bin / bashの内容は何ですか。誤って上書きしてしまった場合はどうすればよいですか
/ bin / bashファイルを誤って/ binフォルダー内に配置することを意図したダムスクリプトで上書きしました。 そのファイルの内容を元に戻すにはどうすればよいですか?ウェブ上のコンテンツを見つけて、コピーして戻す方法はありますか?「シンボリックリンクが多すぎます」というエラーメッセージが端末に表示されることを考慮して、ここでの私のオプションは何ですか? 私はまだこの種のものの初心者であり、私が得ることができるすべての助けに感謝しています。 編集:私はKali 2.2 Rollingに参加していることを忘れていましたが、これはいくつかの追加機能を備えたかなりdebianです。 編集2:数日前まで自分の間違いに気づかなかったため、マシンも再起動しました。そのため、これはかなり難しくなります。


5
カーソルの前にコピーして後で貼り付けるためのBashコマンド?
私はこれをどのように表現するのかわかりませんが、私はしばしば自分自身が次のようなコマンドを入力していることに気付きます: cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak 通常、パスを2回(タブ補完で)入力するか、カーソルでパスをコピーして貼り付けます。これを入力しやすくするbashfooがありますか?

5
bashが実行されているttyを取得する方法は?
このページで提案されている2番目の方法では、次のコマンドでbashが実行されているttyを取得します。 ps ax | grep $$ | awk '{ print $2 }' 確かにこれは少し怠け者であり、実行中のすべてのプロセスをリストして、そのうちの1つを抽出するだけです。より効率的ではないでしょうか(これが望ましくない効果をもたらすかどうかも尋ねています): ps -p $$ | tail -n 1 | awk '{ print $2 }' 参考までに、この問題に出くわしたのは、最初のコマンドで実際に2行(またはそれ以上)の行が生成される場合があるためです。これは$$、サブストリングとして含まれるPIDで実行されている別のプロセスがある場合、ランダムに発生します。2番目のアプローチでは、必要なことがわかっているPIDを要求することで、このようなケースを回避しています。
24 bash  tty  ps 

1
引用符で囲まれていないワイルドカードがscpでリモートで機能するのはなぜですか?
私はこれをBashで入力しています: scp user@remote:~/dir/*.xml . そして、それは機能し、リモートサーバー上のワイルドカードを作るすべてのファイルを取得します。しかし、なぜこれが機能するのでしょうか?Bashは、引数がのようなツールで見えるようになる前に、引数のワイルドカード表現を展開すると考えましたscp。
24 bash  shell  wildcards 

1
コマンドラインツールにはどのように独自のオートコンプリートリストがありますか?
UbuntuのBashは、ツールの特定のアクションリストをどのように認識しますか? たとえば、apt-getとtabを2回入力すると、削除、更新、アップグレードなどのみが表示されますが、別のコマンドのアクションや現在のディレクトリ内のファイルは表示されません。 Goでコマンドラインツールを開発していますが、この機能をサポートするディストリビューションにこの機能を提供したいと考えています。

4
Bashコマンド補完をカスタマイズする方法は?
bashでは、completeビルトインを使用してコマンド引数のカスタマイズされた補完を設定するのは簡単です。たとえば、概要がの仮想コマンドの場合foo --a | --b | --c、次のようにできます。complete -W '--a --b --c' foo また、などを使用Tabして、空のプロンプトでを押したときに表示される補完をカスタマイズすることもできます。次に、空のプロンプトでタブを押すと、とのみが提案されます。complete -Ecomplete -E -W 'foo bar'foobar 空でないプロンプトでコマンド補完をカスタマイズするにはどうすればよいですか?例えば、私が座っている場合: anthony@Zia:~$ f タブを押すと常に完了するように補完をカスタマイズするにはどうすればよいfooですか? (私が望む実際のケースはlocTAB→ localcです。そして、これを尋ねるように促した私の兄弟は、mplayerでそれを望んでいます)。

4
bashで始まる:-ltおよび-gt引数
私はbashから始めて、次を見つけました: if test $first -lt $second then echo $first is lower than $second else if test $first -gt $second then echo $first is higher than $second else echo $first and $second are equals fi fi スクリプトを読み取って実行するために、私はそれが何をするかを知っていますが、-ltと-gtが何のためにあるのかはわかりません。 誰かがその種類の「ツール」の名前は何であり、彼ら(-ltと-gt)は何をするのか教えてもらえますか?ありがとう!
24 bash  shell  test 


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