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

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

3
bashでユーザー入力のパスワードをプログラムの標準入力の一部にする最も安全で簡単な方法は何ですか?
ユーザーにbashシェルプロンプトでパスワードを入力させ、そのパスワードをプログラムのstdinの一部にするための(1)最も安全で(2)最も簡単な方法を探しています。 :これが見えるようにstdinを必要とするもので{"username":"myname","password":"<my-password>"}、<my-password>何をしているが、プロンプトシェルに入力されます。プログラムstdinを制御できれば、パスワードを安全に要求して設定できるようにプログラムを変更できますが、ダウンストリームは標準的な汎用コマンドです。 以下を使用するアプローチを検討し、拒否しました。 コマンドラインにパスワードを入力するユーザー:パスワードは画面に表示され、「ps」を介してすべてのユーザーに表示されます 外部プログラムへの引数へのシェル変数補間(例:)...$PASSWORD...:パスワードは引き続き "ps"を介してすべてのユーザーに表示されます 環境変数(環境に残っている場合):パスワードはすべての子プロセスに表示されます。信頼できるプロセスでさえ、診断の一部としてコアダンプまたは環境変数をダンプする場合、パスワードを公開する可能性があります 長期間ファイルに保存されたパスワード、たとえ権限が厳しいファイルでも:ユーザーが誤ってパスワードを公開し、rootユーザーが誤ってパスワードを表示する可能性があります 私は現在の解決策を以下の答えとして挙げますが、誰かがそれを思いついた場合、より良い答えを喜んで選択します。もっと単純なもの、または誰かが私が見逃したセキュリティ上の懸念を見つけたのではないかと思います。
12 bash  security  password  curl 


7
ファイル記述子が有効かどうかのテスト
bashスクリプトに、ファイル記述子(FD)が開いているときに、3以上の追加情報を出力させたいと思います。FDが開いているかどうかをテストするために、次のトリックを考案しました。 if (printf '' 1>&3) 2>&-; then # File descriptor 3 is open else # File descriptor 3 is not open fi 私のニーズにはこれで十分ですが、FDが有効かどうかをテストするより慣用的な方法があるかどうかについて知りたいです。私は特にのマッピングが存在するか否かについての興味fcntl(1)(FDフラグの検索を可能にするシェルコマンドにシステムコールを、O_WRONLY及び O_RDWRFDが書き込み可能であるかどうかをテストし、O_RDONLY及び O_RDWRFDが読み取り可能であるかどうかをテストします)。

4
名前に特定の文字列があるディレクトリ内のファイルをカウントしますか?
次のファイルがあります。 Codigo-0275_tdim.matches.tsv Codigo-0275_tdim.snps.tsv FloragenexTdim_haplotypes_SNp3filter17_single.tsv FloragenexTdim_haplotypes_SNp3filter17.tsv FloragenexTdim_SNP3Filter17.fas S134_tdim.alleles.tsv S134_tdim.snps.tsv S134_tdim.tags.tsv snp名前に単語(大文字と小文字を区別)が含まれているファイルの数を数えたい。使ってみた grep -a 'snp' | wc -l しかし、私はそれgrepがファイル内を検索することに気づきました。ファイル名をスキャンするための正しいコマンドは何ですか?
12 bash 

2
コマンド履歴の変更を元に戻す方法は?
UNIXシステムでは、上下の矢印キーを押して、前のコマンドに移動できます。これは非常に便利です。 時々、上に行って、もう一度使用したいコマンドを見つけますが、いくつかのバリエーションがあります。このような変更を行った場合、でチェックしない限り、元のコマンドを元に戻す方法がありませんhistory。 キーを使用してアクセスした履歴のコマンドへの変更を「元に戻す」方法はありますか? 現在の回避策は#、コマンドの前にa を付加することです。このように、現在のコマンドはコメントとして実行されるため、何も起こりません。その後、キーを使用してコマンドをもう一度参照できます。問題は、私が使用していたコマンドがリストの中で遠く離れている可能性があることです。そのため、もう一度200回上がれば少しです。Control + Rも解決策ではありません。私が探していたものを正確に覚えていない可能性があるためです。 例 次の「50コマンド前」を入力しました。 ls -l /etc/httpd/conf/ 今、私はその行に行き、それをに変更しました ls -l /etc/init.d/ Enterキーを押しませんでした。さて、ls -l /etc/httpd/conf/また行きたいです。 私の環境 $ echo $SHELL /bin/bash $ echo $TERM xterm



3
コマンドエラーでbashスクリプトの関数を自動実行する方法はありますか?
私は一連のコマンドを実行する必要があるシェルスクリプトを書いており、すべてのコマンドは以前のすべてのコマンドに依存しています。コマンドが失敗した場合、スクリプト全体が失敗し、exit関数を呼び出します。各コマンドの終了コードを確認することはできましたが、有効にできるモードがあるかどうか、またはbashに自動的にそれを実行させる方法があるかどうか疑問に思っています。 たとえば、次のコマンドを実行します。 cd foo || myfunc rm a || myfunc cd bar || myfunc rm b || myfunc これらのコマンドのいずれかが失敗した場合にmyfuncを呼び出す必要があることを、これらのコマンドを実行する前に何らかの方法でシェルに通知できる方法はありますか? cd foo rm a cd bar rm b

5
テキストの検索後に特定の行を読み取る方法は?
テキストを見つけた後、特定の行数を読み取るにはどうすればよいですか? 例えば。: 「Unix」が見つかったら、次の2行を読みます。 Test 1 Test 2 Test 3 Test 4 UNIX Test 5 Test 6 Test 7 Test 8 Test 9 結果は次のようになります。 Test 5 Test 6 注:最後の例の「Unix」は引数なので、他のテキストでもかまいません。 私が持っているもの: 私はまだアイデアが足りないので、ただ光が必要です。それを行う別のスクリプトを作成することを考えてください。
12 bash  shell 

5
非対話型シェルはエイリアスを展開します
次のようなコマンドを実行すると、ホスティングアカウントでエイリアスを展開できません。 ssh user@server "bash -c \"alias\"" 私の.bashrcファイルは: echo .bashrc # .bashrc shopt -s expand_aliases # Source global definitions (commenting this out does nothing) if [ -f /etc/bashrc ]; then . /etc/bashrc fi # User specific aliases and functions alias php="php55" alias composer="php ~/bin/composer.phar" 上記のsshコマンドを実行すると、「。bashrc」がエコーされます。しかし、エイリアスを実行しようとしても何も起こりません。 「bash -ic」を試すこともできますが、これは実際には簡単に変更できないスクリプト内にあり、なぜこれが機能しないのか知りたいのです。 の出力 ssh user@server "bash …
12 bash  ssh  alias  bashrc 

3
下部にプロンプ​​トを表示してXTermを起動する方法は?
XTermを起動すると、プロンプトは端末の最初の行から始まります。コマンドにそれが底に達する、とまでダウンプロンプト移動を実行している場合、その上に、その後そこから(もないままShift- Page Downまたはマウスがこれを変更することができます)。端末のライフタイムの開始を「特別」にするのではなく、プロンプトは常に端末の下部にある必要があります。複数行のプロンプトがあることに注意してください。 もちろん、それ以外は以前と同じように機能するはずです(サイズ変更可能、スクロール可能、出力に不要な改行がない、出力が不可解に消えないなど)PROMPT_COMMAND='echo;echo;...'。ソリューションは、理想的にはシェル固有のものであってはなりません。 編集:現在のソリューションは、単純な例での作業中に、いくつかの問題があります。 それはだバッシュの特定。理想的なソリューションは、他のシェルに移植可能でなければなりません。 他のプロセスが変更するPS1と失敗します。1つの例はvirtualenvです。これは(virtualenv)、の最初に追加され、PS1その後、常に折りたたみの真上で消えます。 Ctrl- l今削除歴史の最後のページを。 XTermをフォークする以外に、これらの問題を回避する方法はありますか?
12 bash  terminal  xterm 

2
パス内の実行可能ファイルのbashのキャッシュを無効にする
これは重複していないことに注意してください。キャッシュをクリアするのではなく、キャッシュを無効にすることを求めています。クリアするキャッシュがある場合、それは明らかに無効ではありません。 まれに、bashがパスで見つけたもののキャッシュに気づく場合があります。それは、それが役に立ったからではなく、流血の迷惑なためです。例: ~ dc$ export PATH=$HOME/bin:$PATH ~ dc$ cat bin/which #!/bin/bash echo "my which" ~ dc$ which my which ~ dc$ rm bin/which ~ dc$ which which -bash: /Users/dc/bin/which: No such file or directory 別のシェルで... ~ dc$ which which /usr/bin/which このキャッシングは、ディスクが遅く、メモリが高価で制限されていたため、あまりキャッシュできなかった古き良き時代には理にかなっていると思います-パスをキャッシュすることは、コマンドを見つけるために必要なすべてのディスクブロックをキャッシュするよりも安価です。 。しかし、最近では目立った利点はなく、解決する以上の問題を引き起こしています。バグであることをあきらめて、それは間違った機能です。 そして、それを無効にする方法すら見つけられません。ポインタはありますか?
12 bash 

3
bashの条件式の-aと-eの違いは何ですか?
からman bash: CONDITIONAL EXPRESSIONS [...] -a file True if file exists. [...] -e file True if file exists. だから、何の違いである[ -a $FILE ]とは、[ -e $FILE ]任意の場合は、? 実際の違いがない場合、同じ目的で2つのフラグが存在するのはなぜですか?
12 bash  shell  test 

1
コマンドの最後で停止するようにbashシェルPS1カラーを停止するにはどうすればよいですか?
実際のシェルコマンドが異なる色で表示されるカスタムPS1カラーがあるので、入力したコマンドをすばやく確認して、コマンド出力自体から区別することができます。 PS1の色がコマンドプロンプトで「青」に設定され、シェルのデフォルトの色が白であるとします。 lsなどのコマンドを入力します(ls -lは青色になっています)。 それが生成する出力、最初の行はまだ青です 残りのすべての線は白になります 私が欲しいのは、コマンドの後のすべての出力が「白」になることです。 もう一つの例: コマンド「cat」を入力すると、色が青になります 出力が来て、出力全体が青色です 「blue」と入力したコマンドプロンプトを維持しながら、出力を「白」にしたい 一部のコマンドでは問題ありませんが、他のコマンドでは、同じ色が出力の最初の行にオーバーフローしてから、デフォルトの色が適用され、他のいくつかのコマンドでは、出力全体(catなど)が同じ色になります。 入力したコマンドのみを1つの色で、残りをデフォルトに保つ方法はありますか? 私はOSXを使っています。 編集#1 @derobertがコメントでリンクしているスクリーンショットは、私が探しているものを示しています。
12 bash  prompt 

5
404を取得した後、「wget」をどのように停止しますか?
でブレース展開を使用するとwget、連番の画像を簡単に取得できます。 $ wget 'http://www.iqandreas.com/sample-images/100-100-color/'{90..110}'.jpg' これは、番号の最初の10個のファイルフェッチ90.jpgする99.jpgだけで罰金を、しかし、100.jpg以降返し404:ファイルが見つかりません(私はサーバー上に保存された100枚の画像を持っている)エラーが発生しました。これらの{00..200}存在しないファイルは、存在しないファイルが100個あるなど、より大きな範囲を使用する場合、より「問題」になり、スクリプトの実行時間が増加し、わずかな負担(または少なくとも煩わしさ)になることさえあります。サーバー。 wget最初の404エラーを受け取った後に停止する方法はありますか?(または、別の理由で範囲内にファイルが欠落している場合は、続けて2つ続けてください)中括弧の展開を使用する必要はありません。ループも結構です。

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