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

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

3
bashはパラメーター展開で後方参照をサポートしますか?
私が持っているという名前の変数descrの文字列を含むことができBlah: -> r1-ae0-2 / [123]、-> s7-Gi0-0-1:1-US / Fooなど私が取得したい-> r1-ae0-2、-> s7-Gi0-0-1:1-US文字列から一部を。現時点ではdescr=$(grep -oP '\->\s*\S+' <<< "$descr"これに使用しています。これを行うためのより良い方法はありますか?パラメータ拡張でこれを行うことも可能ですか?


1
対話型シェルは非対話型になりますか?
対話型シェルは非対話型になりますか? 注:「対話型と非対話型の違いは何ですか?」という基本的な質問について多くの研究を行ってきましたが、研究の結果、この質問をすることになりました。 この質問には、回答するために「インタラクティブ」にどのタイプの定義を使用するかが重要であるため、部分的に長い前文があります。定義は、特定のセットの任意のラベルです。さまざまなプロパティを説明できます。または、行動を予測し、目的を理解するために使用できる情報を提供できます。 この最後のタイプは、「アクション定義」または「動的定義」と呼ぶことができ、最も便利です。 ではman 1p sh、対話型シェルの次の定義が提供されています。 If the -i option is present, or if there are no operands and the shell’s standard input and standard error are attached to a terminal, the shell is considered to be interactive. 「-iオプション」の記述と「オペランド」という言葉の使用から、これは実行中のシェルで調べることができる属性ではなく、シェルの呼び出しを指します。 Bashのマニュアルページでは、少し異なる表現をしています。 An interactive shell is one started without non-option arguments …

5
「if」と「then」は実際にプログラムされていますか
私はセミコロンがプログラムを分離するために使用されることを読みました: $ echo 3; ls -la それはを意味するのですかif、thenそしてelseここには別のプログラムがありますか? $ if [ $VARIABLE == abcdef ] ; then echo yes ; else echo no ; fi この質問はセミコロンに関するものではありません。

1
典型的なシェル「fork bomb」は、どのくらい正確に自分自身を2回呼び出しますか?
Askubuntuや他の多くのStack Exchangeサイトで有名なFork Bombの質問を読んだ後、誰もが言っていることは明らかだとはわかりません。 多くの答え(最良の例)はこう言います: 「{:|: &}関数:を実行し、その出力を:再度関数に送信することを意味します」 さて、出力は正確に何:ですか?他に何が渡されてい:ますか? そしてまた: 基本的には、呼び出しごとに自分自身を2回呼び出す関数を作成し、自分自身を終了する方法はありません。 それはどのくらい正確に2回実行されますか?私の意見では:、最初のもの:が実行を終了するまで何も渡されず、実際には終了しません。 ではC例えば、 foo() { foo(); foo(); // never executed } foo()最初のものfoo()が終了しないという理由だけで、2番目のものはまったく実行されません。 同じ論理が当てはまると思います :(){ :|: & };:、 :(){ : & };: と同じ仕事をする :(){ :|: & };: ロジックを理解してください。

2
プログラムはSTDOUT / STDERR以外の場所にどのように出力しますか?それを避ける方法は?
どうやら、使用可能なすべての出力先がわからないようです。stdout(&1)とstderr(&2)について知っています。ただし、両方の記述子をリダイレクトした後でも、コンソールに出力が表示されることがあります! 私が考えることができる最も簡単な例はGNU Parallelです。使用するたびに、引用通知が表示されます。行っても&2>1 > file、通知が表示されます。 そして同じことが当てはまりemergeます。emergeを実行していくつかの問題が発生した場合、一部の情報はにも出力されstdoutませんstdin。 私は主にを使用してこれらの問題を解決しますscriptが、この問題の原因は何だと思います。

1
bash-builtinがCPUを100%焼くのを待つ
少なくともGNU bashバージョン4.3.42 x86_64 && GNU bashバージョン4.3.11 x86_64で発生します シグナルによって割り込み可能にするために(SIGUSR1として)sleep & wait $!単純な代わりに使用します。ただし、次のコマンドを実行すると、bashビルトインが奇妙な動作をするようです。sleepsleepwait ターミナル1: cat <( trap 'echo SIGUSR1' SIGUSR1; echo $BASHPID; while :;do sleep 1 & wait $!; echo test; done )& ターミナル2: kill -10 /the pid of the subshell, printed by the previous command/ ターミナル1: ^C (ctrl + C) 次に、CPUを100%燃焼させるサブシェルを取得します。 …

1
execとteeをログファイルに:これらのbashコマンドを説明します
これは私のbashスクリプトファイルの一番上にあります。 export LOGFILE=$LOGDIRECTORY/${SCRIPT_NAME}.log exec > >(tee $LOGFILE) exec 2>&1 それは何をするためのものか?ここで実行している2つのexecプロセスは何ですか?このように保つと、スクリプトの実行のすべての出力がパイプされ$LOGFILEますが、execステートメントの観点から理解したかったのです。
15 bash 

6
シェルスクリプトの終了ステータスに「予約済み」コードを使用する
最近、Advanced Bash-Scripting Guideのこの特別な意味を持つ終了コードのリストに出会いました。彼らはこれらのコードを予約済みとして参照し、以下を推奨しています。 上記の表によると、終了コード1-2、126-165、および255は特別な意味を持っているため、ユーザー指定の終了パラメーターには使用しないでください。 少し前に、次の終了ステータスコードを使用するスクリプトを作成しました。 0-成功 1-間違ったホスト名 2-無効な引数が指定されました 3-ユーザー権限が不十分 スクリプトを作成したとき、特別な終了コードを認識していなかったため、最初のエラー状態で1から開始し、連続するエラータイプごとに終了ステータスを増やしました。 後の段階で、他のスクリプト(ゼロ以外の終了コードをチェックできる)から呼び出せるように、スクリプトを作成しました。私は実際にまだそれをしていません。これまでのところ、インタラクティブシェル(Bash)からスクリプトを実行しただけで、カスタム終了コードを使用すると問題が発生する可能性があるかどうかを疑問に思っていました。Advanced Bash-Scripting Guideの推奨事項はどの程度重要/重要ですか? Bashのドキュメントには裏付けとなるアドバイスが見つかりませんでした。終了ステータスのセクションには、Bashが使用する終了コードがリストされているだけですが、これらのいずれも予約済みではなく、独自のスクリプト/プログラムで使用することを警告するものでもありません。

3
ダッシュファイルを読み取る方法
どのように私はそれを区切る以外の端末からダッシュファイルを読み込むことができます ./ たとえば読み取るために- file、我々はそれをすることによって読むことができます cat ./-file_name Q:同じことを達成するための代替方法はありますか?
15 bash  cat 


3
産卵 - コマンドが見つかりません!
Mac OS X 10.9.4を使用しています。ローカルマシンから別のホストにファイルをコピーするスクリプトは次のとおりです。 #!/bin/bash #!/usr/bin/expect echo "I will fail if you give junk values!!" echo " " echo "Enter file name: " read filePath echo " " echo "Where you want to copy?" echo "Enter" echo "1. if Host1" echo "2. if Host2" echo "3. if Host3" read choice …

3
bashスクリプトで「1 >>」と「2 >>」はどういう意味ですか?
私が理解している>>から、次のbashスクリプトがあります。これはコマンドの出力を上書きではなく既存のファイルに追加するために使用されますが、この場合はどうしますか?このスクリプトは、ある形式から別の形式に変換するためにいくつかのexeファイルを呼び出しています。各ファイルには長年あるため、ファイル名を見て各ファイルをループします。また、このスクリプトを実行すると、「あいまいなリダイレクト」が発生します #!/bin/bash source $HOME/.bashrc jobout=${1} joberr=${2} # Set some paths and prefixes yr_bgn=2000 yr_end=2000 yr=${yr_bgn} pth_data='/mnt/' pth_rst='/mnt/' while [ ${yr} -le ${yr_end} ] do ./executable1 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} ./executable2 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} ./executable3 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} let yr=${yr}+1 …

5
アイテムがbash配列にあるかどうかをテストするにはどうすればよいですか?
簡単なスクリプトのヘルプ #!/bin/bash array1=( prova1 prova2 slack64 ) a="slack64" b="ab" if [ $a = $b ] then echo "$a = $b : a is equal to b" else echo "$a = $b: a is not equal to b" fi このスクリプトは単に機能しません。リストにslack64が存在するかどうかを確認し(配列を使用)、yesが存在するかどうかを指定するスクリプトが必要です。配列を単一の変数と比較する方法がわかりません。
15 bash  array 

3
現在のセッションのbash履歴
たぶん私は何かを見落としていますが、あなたが使用している現在のセッションの現在のbash履歴を取得する方法があります 私が走ったら ssh host $ pwd $ ls $ cd /tmp これら3つのコマンドだけを見たいです。

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