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

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

4
インタラクティブでないログインシェルが存在する可能性はありますか?
このフローチャートの解釈 私はそれを男バッシュで見つけました: bashが対話型ログインシェルとして、または--loginオプション付きの非対話型シェルとして呼び出されると、ファイル/ etc / profileが存在する場合、そのファイルからコマンドを最初に読み取り、実行します。 これは、対話型ログインシェルが/etc/profile(--noprofileなしで)読み取ることを示しています また、オプションreadを持つ非インタラクティブシェル--login/etc/profile これは、非インタラクティブ(スクリプトを実行する、おそらくのように単純な)で(ソース)を読み取れない可能性がある一部のログインシェル(で$0始まる-)を残すようです。date/etc/profile このアイデアを確認または拒否するには: 最初に、最初の文字としてsu -l -a を使用してログインシェルを開始するを使用しようとしましたが、-非対話型にすることができません(それをテストするためのテストを提示できます)。 のようなものを呼び出す $ bash -c 'date' -bash ログインシェルであることを報告しません(最初の文字がであっても-)。 これを試して詳細を明らかにしてください: $ bash -c 'echo "$0 $- ||$(shopt -p login_shell)||";date' -bash -bash hBc ||shopt -u login_shell|| Fri Aug 19 06:32:31 EDT 2016 の最初の文字$0はa -でありi、の値には(インタラクティブ)$-はありませんが、login_shell(-u)としては報告されません。この場合、/ etc / profileは読み取られませんでしたが、これが正しいテストであるかどうかはわかりません。 この質問には十分具体的ではありませんが、この回答には「まれな非対話型ログインシェル」についての言及もあります。 この男の結論は、/etc/profile常に読まれているということです。 …
11 bash  login  startup  bashrc 


1
bashがインタラクティブなDockerコンテナ内で正しくサイズ変更されない
端末サイズが変更されるたびに、通常bashはresize自動的に変更され、LINESおよびCOLUMNSが正しく再計算されます。しかし、何らかの理由で、これはbashインタラクティブに実行されているDockerコンテナー内では機能しません。 私が持っているshopt checkwinsize -s私の中でbashrc(そしてそれがされていることを確認しドッカーコンテナにon使用しますshopt)。ホストbashセッションと同じです。 私は本当にアイデアがありません。ウィンドウのサイズが変更されたときに自動的に評価するshopt checkwinsize -sために私が見つけた唯一の方法です。bashresize
11 bash  docker 

4
新しいプロンプトが表示されるたびにbashプロンプト実行コマンド
現在のgitブランチを表示する次のプロンプトがbashにあります。 PS1+="$(git_prompt)" #git_prompt is a function in my .bashrc これは、.bashrcをソースするときは機能しますが、ブランチを変更するときは機能しないため、PS1変数は.bashrcをソースするときにのみ評価されますが、新しいプロンプトが表示されるたびに評価する必要があります。これはどのようにしてbash 4.3で実現できますか?
11 bash  prompt 

2
bash配列の要素数をカウントします。配列の名前は動的です(つまり、変数に格納されます)。
質問の簡単な説明: 配列の完全なコピーを作成したり、配列を使用したりせずに、配列の名前が動的である(つまり、変数に格納されている)bash配列の要素数をカウントする組み込みのbashメソッドはありevalますか? 詳しくは: bashパラメータ置換を使用すると、次のことができます。 配列の長さを決定します myArr=(A B C); echo ${#myArr[@]}。 変数を名前で間接的に参照します NAME=myVar; echo ${!NAME}(これは配列要素にも適用されます): NAME=myArr[1]; echo ${!NAME} しかし、配列の名前が別の変数に格納されている場合、配列内の要素の数をどのように決定できますか?(これは、上記の2つのパラメーター置換の組み合わせと見なすことができます。)例: myArr=(A B C D) NAME=myArr # Get the number of elements in the array indirectly referenced by NAME. count=${#$NAME[@]} # This syntax is invalid. What is the right way? 以下は、すべて失敗する複数の試行です。 # Setup …

2
ctrl + c / not /でwhileループを中断する方法は?
このループを考えると: while sleep 10s ; do something-that-runs-forever done Ctrl + Cを押すと、whileループ全体が中断されます。私がやりたいのは、「何か」のプロセスを中断し、10秒経過してから「何か」を再起動することです。 ctrl + cが「何か」にのみ影響し、whileループには影響しないようにするにはどうすればよいですか? 編集:SIGINTのように「割り込み」。殺します。アボート。終了します。「一時停止」のような「中断」ではありません。
11 bash 

3
`>> / dev / stderr`(空白あり)と`>&2`の違いは何ですか?
バッシュで。 何を使うべきか判断するのが難しいのですが? 私のすべてのスクリプトは「>> / dev / stderr」を使用します bashのプロンプトで、私がしようとした場合: echo test >>/dev/stderr作品 echo test >> /dev/stderr作品が echo test >/dev/stderr作品 echo test > /dev/stderr作品 echo test >>&2失敗! echo test >> &2失敗! echo test >&2作品は echo test > &2失敗します! すべてのスクリプトをに変更してもかまいません>&2。 また、ssh(後su SomeUser)に大きな影響を与えるようで、>>/dev/stderrまったく機能せず(権限が拒否されます)、機能するだけ>&2です。


1
bash変数割り当ての単一括弧
bashの単一の括弧について疑問に思っていました。それらはサブシェルでコマンドを実行するために使用され、配列を作成するために使用されることは知っていますが、それ以外のものに使用されますか? 私の注意を引いたのは、変数の代入でinを使用すると、 var=(hello) echo $var # hello bashはエラーなどを生成せず、出力はあたかも同じです var=hello これら2つの変数の定義は同じですか、それとも違いがありますか?
11 bash  array 

2
バッシュのゾンビ
バッシュはゾンビを作成していないようです。プロセスが強制終了されるとすぐに取得されるようです。 bashでゾンビを作れますか? なぜ私が尋ねているのですか? 子プロセスを安全に強制終了できるようにしたい、またはkill -9一定期間内に停止しない場合は安全に終了できるようにしたいが、自分の子プロセスではないプロセスを誤って消去したくない。ゾンビプロセスは通常、非常に簡単で、レースコンディションを安全にします。
11 bash  process 

2
バッシュ:「履歴番号」と「コマンド番号」
PS1変数を使用してシェルプロンプトをカスタマイズする方法をグーグルで調べているときに、使用できる特殊文字の表が表示されます。特に: \! the history number of this command \# the command number of this command 「履歴番号」はより一般的に使用されているようで、コマンドを使用!523して履歴からコマンドをやり直す方法を知っています。しかし、「コマンド番号」に同様の機能があるかどうかはわかりません。私は\#PS1変数を入れてみましたが、特定のセッションで入力されたコマンドの数を出力しているようです(とは異なり\!、ログアウト/終了後も存続します)。 誰もが「コマンド番号」を便利または意味のある方法で使用する方法を知っていますか?

4
コマンドのバックグラウンドでパイプされたシーケンス内の任意のコマンドのPIDを取得します
でbash、私が実行すると: cmd1 | cmd2 | ... | cmdi | ... | cmdn & どこcmd{1..n}明瞭ではないかもしれないが、どのように私はのPIDを得るのですかcmdi?または、cmdiプロセスにどのように通知できますか?(例えば、それを送信SIGUSR1?) pkill/ pgrep、pidofなどの良い答えのように見ていない、の他のインスタンスので、cmdi多分、実行している同じパイプラインの一部として含みます。jobs -pのPID cmd1を私に与えます。 iの何でもかまいません{1..n}。
11 bash  shell  pipe  job-control 

4
パターンをbash補完に追加する方法(解凍用)?
入力すると unzip <tab> で終わるすべてのファイルのリストを取得します.zip。これは、unzipコマンドのタブ補完の標準的な動作です。 ただし、unzipファイル.udpに加えて、末尾がであるリストファイルのbash補完も必要.zipです。地元でこの行動をどのように達成でき.bashrcますか?

3
Pipelineの前半でコマンドのPIDを取得する
inotifywaitディレクトリを監視し、変更が検出されたときにアクションを開始するために使用するbashスクリプトを書いています。何かのようなもの: inotifywait -m ... | while read f; do something; done inotifywaitはそれ自体で終了しないため、このスクリプトは停止しません。 したがって、私の計画は、inotifywaitプロセスのPIDを取得し、それをファイルに保存して、後で別のプロセスに強制終了させることでした。 inotifywait -m ... | { echo ??PID?? > pid-file; while ... } しかし、私はPIDを取得する方法がわかりません。これを達成する簡単な方法はありますか?もう1つの方法は、シェルスクリプトのPIDを$$ファイルに保存してシェルスクリプト全体を強制終了することですが、whileループの後にいくつかのクリーンアップを実行したいと思いました。 私は使ってみましcoprocたが、うまくいくと思いますが、必要以上に複雑に思えます。
11 bash  pipe  pid 

3
次に特定の時間になるまで眠る
「4:00」のような特定の時間が次に発生するまでスリープする一連のコマンドまたは単一のコマンドが必要です。 どうすればいいですか? at私は現在てるスクリプトを残してはいけないため、コマンドまたはcronジョブはオプションではありません。 私が話している特定のケースは、画面で実行されているスクリプトです。スクリプトのある時点で必要な多くの重要な変数が格納されているため、スクリプト自体によるスクリプトの実行を停止しないことが非常に重要です。スクリプトは、常に通常の方法で実行されるとは限りません。特定の時間に実行する必要があるだけです。 スクリプトがファイルや、cronjobsやその他の画面などのその他のタスクを作成する必要がある場合、それは非常に有益です。これは単にデザインの問題です。 私はちょうどいい考えを持っていました: difference=$(($(date -d "4:00" +%s) - $(date +%s))) if [ $difference -lt 0 ] then sleep $((86400 + difference)) else sleep $difference fi もっと良いアイデアはありますか? 必要に応じて、さらに情報が追加されます!
11 bash  date  time  sleep 

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