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

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

5
Bashで単一の感嘆符を入力するとどうなりますか?
Bashは、この質問に対する回答で説明されているように、履歴の展開に感嘆符を使用します(たとえばsudo !!、前のコマンドラインをで実行しますsudo)。ただし、次のコマンド(つまり、単一の感嘆符)の実行内容を説明する場所は見つかりません。 ! 何も印刷せずに1で終了するように見えますが、なぜそうなるのかわかりません。私はオンラインでBashのマニュアルページを見ましたが、「予約語」であるという事実以外には何も見つかりませんでした}。 } エラーを出力します: bash: syntax error near unexpected token `}'

2
bash履歴で一連のコマンドを実行するためのショートカットはありますか?
私に次の些細な例があると仮定しますhistory: ... 76 cd ~ 77 ./generator.sh out.file 78 cp out.file ~/out/ 79 ./out/cleaner.sh . 80 ls -alnh /out ... 私は、コマンドを実行したい場合は77、78、および791つのコマンドで、このためのショートカットが存在しませんか?私は試してみましたが!77 !78 !79、実行するためにそれらをすべて1行に配置するだけです。

1
一致を見つけた後、Grepの終了が遅いですか?
デバイス接続のbtmonをポーリングするbashスクリプトを作成しようとしています。私は実用的なソリューションを持っていますが、それはばかげて遅いです、そして、問題はgrepがマッチを見つけた後に終了するのが非常に遅いようです(約25秒)。高速化grepするか、まったく使用しないようにするにはどうすればよいですか? #!/bin/bash COUNTER=0 while : do until btmon | grep -m 1 '@ Device Connected' do : done let COUNTER=COUNTER+1 echo on 0 | cec-client RPI -s -d 1 sleep 5 echo as | cec-client RPI -s -d 1 until btmon | grep -m 1 '@ Device Disconnected' do : …
20 bash  grep 

2
`command 1> file.txt 2> file.txt`の動作が` command 1> file.txt 2>&1`と異なるのはなぜですか?
stdoutとstderrの両方を同じファイルにリダイレクトする場合、、command 1>file.txt 2>&1またはを使用してリダイレクトできますcommand &>file.txt。しかし、なぜcommand 1>file.txt 2>file.txt上記の2つのコマンドと動作が異なるのですか? 以下は検証コマンドです。 $ cat redirect.sh #!/bin/bash { echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file.txt 2>&1 { echo -e "output\noutput" && echo -e "error" 1>&2; } 1>file1.txt 2>file1.txt { echo -e "error" 1>&2 && echo -e "output\noutput"; } 1>file2.txt 2>file2.txt { echo -e …

3
エイリアスまたは関数を介して、シェルで実際に実行されたコマンドを確認するにはどうすればよいですか
たとえば、bash関数(またはエイリアス)がありますfunction install() {sudo apt-get install $@}。コマンドを実行install dicelabすると、実際に実行されると予想されsudo apt-get install dicelabます。シェルによって実際に実行された内容はどこで確認できますか?私のより複雑なエイリアスが期待どおりに機能することを確認したいと思います。
20 bash  shell  debugging 

4
「eval echo」を使用するのは常に安全ですか?
を使用するevalと、任意のコードの実行が許可されるため、多くの場合推奨されません。ただし、を使用するeval echoと、残りの文字列がの引数にechoなるため、安全である必要があります。これは正しいですか?
20 bash  echo 

2
高度に投票されたワンライナーのネストされた二重引用符
3.5Kを超える票を含むStackOverflowの回答にDIRは、現在のbashスクリプトのディレクトリに割り当てるためのこの1つのライナーが含まれています。 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ネストされた二重引用符に困惑しています。私が知る限り、次のフラグメントは二重引用符で囲まれています。 "$( cd " "${BASH_SOURCE[0]}" " && pwd )" ...そして、=($( dirnameおよび))の右側にある他のものはすべて引用符で囲まれていません つまり、2番目、4番目、および6 "番目の"文字は、それぞれ1番目、3番目、および5 番目の文字を「閉じる」と仮定します。 二重引用符で"${BASH_SOURCE[0]}"何が達成されるのか理解していますが、他の2組の二重引用符の目的は何ですか? 一方、(および高い得点にもかかわらず)上記のスニペットが正しくない場合、名目上の意図を達成する正しい方法は何ですか? (名目上の意図ではpwd、最初にcd-ingの後に返された値をで返されたディレクトリに収集dirname "${BASH_SOURCE[0]}"し、cdサブシェルで-ing を実行し$PWD、親シェルのが変更されないようにします)。

4
履歴コマンドが.bash_historyに保存されない場合があります
昨日、CentOS 7で多くのコマンドを発行しました。しかし、今日これらのコマンドを取得したいとき、レコードがないことがわかりました。ファイルを開いたとき.bash_history、昨日発行したコマンドはまだ見つかりませんでしたが、数日前に多くの古いコマンドを見つけました。最近のコマンドが保存されなかったのはなぜですか?履歴機能を増やすにはどうすればよいですか?

5
引数の途中にEOFがあるのはなぜですか?
bashを伝えることができるように、import osまたはfrom sys import stdoutインポートされたモジュールで新しいPythonインタープリターを生成するような小さなbash関数を作成したかったのです。 後者のfrom関数は次のようになります。 from () { echo "from $@" | xxd python3 -i -c "from $@" } これを呼び出すと: $ from sys import stdout 00000000: 6672 6f6d 2073 7973 2069 6d70 6f72 7420 from sys import 00000010: 7374 646f 7574 0a stdout. File "<string>", line 1 from sys …
20 bash  python 

6
対話的に、bashで数字のn回の繰り返しを入力する方法
コマンドを実行したい foo --bar=baz <16 zeroes> 16個のゼロを効率的に入力するには* Alt押した1 6 0ままにすると、次のことが160回繰り返されますが、これは望んでいないことです。emacsではAlt-[number]またはを使用できますCtrl-u 1 6 Ctrl-u 0が、bash Ctrl-uでは現在入力されている行を削除し、次のゼロは行に0を追加するだけです。 私が行った場合 foo --bar=baz $(printf '0%.0s' {1..16}) その後history、上記ではなく、正確に表示されfoo --bar=baz 0000000000000000ます。すなわち、bashは私が望むように動作しません。(編集:ポイントされている、$(...)コマンド置換を使用せずにいくつかのゼロを入力したい) (*)「効率的に」の技術的定義は「with O(log n)keystrokes」、できれば16の桁数(16のすべての値)に等しい定数のキーストローク数であると思います。emacsの例は、この定義により効率的と見なされます。

3
`<&-`は何をしますか?
Bashのスニペットをコピーして、リモートで実行されるsshコマンドをバックグラウンド化しました。 ssh user@remote &lt;&lt;CMD some process &lt;&amp;- &gt;log 2&gt;error &amp; CMD 何を&lt;&amp;-するの? 私の推測では、それは同じです&lt; /dev/null 私の次の理解では、三つの主要なファイルディスクリプタが(ということでstdin、stdout、stderr)を防止するためにクローズする必要があります。 ジョブがバックグラウンドになり、スクリプトが終了します-どういうわけか競合しますか? ターミナルを閉じると、ターミナルからstdinを受け入れているすべてのプロセスが閉じられますか?

2
bashの予期しない文字に一致するブラケット式(範囲なし)
Linuxでbashを使用しています。次のifステートメントから成功していますが、これは失敗コードを返すべきではありませんか? if [[ ■ = [⅕⅖⅗] ]] ; then echo yes ; fi 正方形はどの文字とも等しくないため、成功コードを取得する理由がわかりません。 私の場合、二重括弧を保持することが重要です。 このシナリオで範囲を実行する他の方法、または他に何か提案はありますか?
20 bash  locale  test 

2
エントリを再利用および変更したときに、bashによる履歴の編集を停止するにはどうすればよいですか?
bashの一部のインスタンスは、前のコマンドを再使用および編集するときにコマンド履歴を変更しますが、その他のインスタンスは変更しないようです。私は検索と検索を行ってきましたが、履歴内のコマンドが再利用および編集されたときに変更されないようにする方法を示すものは見つかりません。 このような質問がありますが、それは編集中の履歴に対処する方法を言っているようです。コマンドを再利用するときに履歴を編集するbashのインスタンスに出会ったのは最近です-私が使用した以前のすべてのbashシェルは、再利用時に履歴を変更しないように構成されていますコマンドを編集します。(おそらく、私は過去15年間ほど、シェルの歴史に適切な注意を払っていませんでした...) それがおそらく最良の質問です:bashに履歴を変更するように決して指示することはできません-もしそうなら、どのように?


3
グローバルbash_profile
グローバル環境変数を設定するためのファイルが/etc/profileあり/etc/bashrc、多分私はそれらの目的を誤解しているだけかもしれませんが... グローバルbash_profileファイルはありますか? Mac OS Xを使用しています
20 bash  osx  profile  bashrc  etc 

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