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

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

2
bashパイプラインで「yes」を使用すると、無限ループが発生しないのはなぜですか?
そのドキュメントによると、bashはパイプライン内のすべてのコマンドの実行が完了するまで待機してから続行します シェルは、値を返す前に、パイプライン内のすべてのコマンドが終了するのを待ちます。 では、なぜコマンドはyes | trueすぐに終了するのですか?すべきではないyesループが永遠に続き、パイプラインが戻らか? サブ質問:POSIX仕様によれば、シェルパイプラインは、最後のコマンドが終了した後に戻るか、すべてのコマンドが終了するまで待機するかを選択できます。この意味で、共通のシェルは異なる動作をしますか?yes | true永遠にループするシェルはありますか?
16 bash  shell  pipe 

2
「</ dev / null」とはどういう意味ですか?
ブラックホールのように振る舞う&gt; /dev/nullものをリダイレクトすることを理解して/dev/nullいます。しかし、私は何を&lt; /dev/null意味するのか理解していません。私はこのように書かれたスクリプトを見ました: nohup myprogram &gt; foo.out 2&gt; foo.err &lt; /dev/null &amp; それでは、&lt; /dev/null上記のコードでは何を意味するのでしょうか? ここに提案されている例があります
16 bash 

5
これはbashのバグですか?`return`はパイプから呼び出されても関数を終了しません
私は最近bashでいくつかの奇妙な問題を抱えています。スクリプトを簡素化しようとしている間に、この小さなコードを思いつきました。 $ o(){ echo | while read -r; do return 0; done; echo $?;}; o 0 $ o(){ echo | while read -r; do return 1; done; echo $?;}; o 1 return印刷せずに関数を終了する$?必要がありますか?それでは、パイプから単独で戻ることができるかどうかを確認しました。 $ echo | while read -r; do return 1; done bash: return: can only `return' from a function …

2
パイプとhere文字列を使用したリソース使用量
次の2つを使用して、同じ結果を得ることができますbash。 echo 'foo' | cat そして cat &lt;&lt;&lt; 'foo' 私の質問は、使用されるリソースに関する限り、これら2つの違いは何ですか、どちらが良いですか? 私の考えでは、パイプを使用している間、余分なプロセスechoとパイプを使用しているのに対し、ここでは文字列ではファイル記述子のみが使用されていcatます。
16 bash  pipe  resources 


6
シェル:「2588の可能性をすべて表示しますか?」
それで、ラップトップを動かしていました(そして、キーボードに設定するという悪い癖があります...)そして私はこれを発見するために目を覚ました: $ すべての2588の可能性を表示しますか?(yまたはn) このようなものを表示するコマンドは何ですか? 私はBashを使用しています。
16 bash  shell 

2
bashの `set -k`オプションの実用的な使用法
set -kbashでオプションを使用するのはいつですか? Bashリファレンスマニュアルには、 コマンド名の前の引数だけでなく、割り当てステートメントの形式のすべての引数がコマンドの環境に配置されます。 このオプションが何をするのかは理解していますが、いつ必要になるか想像できませんでした。
16 bash  shell 

1
コンマ区切り値のbash補完
コンマ区切りのパラメーターリストの完了規則を作成したいと思います。たとえば、サーバー名のリストを受け取るコマンドがあります: myscript -s name1,name2,name3 この瞬間、私は次の完了を書くことができました: _myscript () { local cur prev opts _get_comp_words_by_ref cur prev opts='-s' servers='name1 name2 name3' if [[ ${cur} == -* ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) else case "${prev}" in -s) if [[ "$cur" == *,* ]]; then local realcur prefix realcur=${cur##*,} …

5
ステートフルbash関数
呼び出しごとにカウントを増やす(そして返す)Bashの関数を実装したいと思います。残念ながら、サブシェル内で関数を呼び出しているため、親シェルの変数を変更できないため、これは簡単ではないようです。 これが私の試みです: PS_COUNT=0 ps_count_inc() { let PS_COUNT=PS_COUNT+1 echo $PS_COUNT } ps_count_reset() { let PS_COUNT=0 } これは次のように使用されます(したがって、サブシェルから関数を呼び出す必要があります)。 PS1='$(ps_count_reset)&gt; ' PS2='$(ps_count_inc) ' そうすれば、番号が付いた複数行のプロンプトが表示されます。 &gt; echo 'this 1 is 2 a 3 test' 可愛い。しかし、上記の制限のために機能しません。 機能しない解決策は、変数ではなくファイルにカウントを書き込むことです。ただし、これにより、同時に実行される複数のセッション間で競合が発生します。もちろん、シェルのプロセスIDをファイル名に追加することもできます。しかし、多くのファイルでシステムが乱雑にならないより良い解決策があることを願っています。

4
現在のディレクトリ内のすべてのPDFをPNGに変換します
現在のディレクトリ内のbashすべての.pdfファイルをファイルに変換するスクリプトを書きたい.pngです。例えば: $ls . a.pdf b.pdf $./pdf2png.sh Converting pdfs to pngs a.pdf -&gt; a.png b.pdf -&gt; b.png これは私の最高の試みです: #!/bin/bash convert -verbose -density 500 -resize '800' a.pdf a.png convert -verbose -density 500 -resize '800' b.pdf b.png
16 bash  imagemagick 

4
readlineでvi編集モードに切り替えるにはどうすればよいですか?
readline環境でvi編集モードに切り替えたい。しかし、「set -o vi」は使いたくありません。キーボードショートカットを使用して一時的に切り替えたい。マニュアルページには、これを行うことができると書かれていM-C-jます。しかし、それは私にとってはうまくいきません。 Ubuntuとxtermを使用しています。gnome-terminalでも動作しません。
16 bash  readline 

2
> |でリダイレクトするもの 行う?
&gt;|出力を単にファイルではなくファイルにリダイレクトする場合はいつ使用する必要があります&gt;か? 私がこれを見せられたときに与えられた説明は、ターゲットファイルが最初に切り捨てられることを保証したということでした。しかし、私は&gt;すでにそれを暗示していたと思いました。 ある&gt;|有益な?

5
生成されたファイル名のリストを引数リストとして使用—スペースあり
によって収集されfindたファイル名のリストを使用してスクリプトを起動しようとしています。特別なものはなく、次のようになります。 $ myscript `find . -name something.txt` 問題は、パス名の一部にスペースが含まれているため、引数の展開時に2つの無効な名前に分割されることです。通常、名前を引用符で囲みますが、ここでは逆引用符の展開によって挿入されます。find各ファイル名の出力をフィルタリングして引用符で囲みましたが、bashがそれらを見るまでにそれらを取り除くには遅すぎて、ファイル名の一部として扱われます: $ myscript `find . -name something.txt | sed 's/.*/"&amp;"/'` No such file or directory: '"./somedir/something.txt"' はい、それがコマンドラインの処理方法のルールですが、どうすれば回避できますか? これは恥ずかしいことですが、私は正しいアプローチを思い付くことに失敗しています。私は最終的にそれをどのように行うかを見つけましたxargs -0 -n 10000...しかし、それは私がまだ聞きたいと思うようなsuchいハックです:バッククォート展開の結果を引用する方法、または別の方法で同じ効果を達成するにはどうすればよいですか? 編集:私は、事実について混乱していたxargs んそれはそう言われていますか、システムの制限を超えることがありますしない限り、単一の引数リストにコレクトすべての引数を。まっすぐに設定してくれてありがとう!他の人は、受け入れられた答えを読んでいるときにこれを覚えておいてください。なぜなら、それは直接指摘されていないからです。 私は答えを受け入れましたが、私の質問は残ります:バックティック(または$(...))拡張でスペースを保護する方法はありませんか?(受け入れられた解決策は非bash回答であることに注意してください)。

4
Bash:インタラクティブなリモートプロンプト
リモートサーバーに接続し、パッケージがインストールされているかどうかを確認するスクリプトがあります。 ssh root@server 'bash -s' &lt; myscript.sh myscript.sh: OUT=`rpm -qa | grep ntpdate` if [ "$OUT" != "" ] ; then echo "ntpdate already installed" else yum install $1 fi この例は単純化できます。myscript2.shこれには同じ問題があります: read -p "Package is not installed. Do you want to install it (y/n)?" choise 私の問題は、bashが私の答えをインタラクティブに読むことができないことです。 ユーザーにプロンプ​​トを表示する機能を失うことなく、ローカルスクリプトをリモートで実行する方法はありますか?
16 bash  shell-script  ssh  stdin  read 

3
Linuxでコマンドの使用を待ちますか?
#!/bin/bash function back() { sleep $1 exit $2 } back $1 $2 &amp; b=$! if `wait $!`;then echo success else echo failure fi bash-3.00# ./back 300 0 failure bash-3.00# ./back 300 1 failure success0を送信するときに終了ステータスとして期待していましたが、まだ取得していfailureます。 また、wait300秒待機しません。代わりに、すぐにメッセージを受け取ります。私は仮定$!の直接の子である$$私のスクリプトインチ そうじゃない? のような待機の終了ステータスをキャプチャすることは可能exit_status=$(wait $!)ですか? if ! ((exit_status));then echo sucess else failure fi

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