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

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


3
「トラップ…INT TERM EXIT」は本当に必要ですか?
クリーンアップタスクにtrap使用する多くの例trap ... INT TERM EXIT。しかし、3つのsigspecをすべてリストすることは本当に必要ですか? マニュアルによると: SIGNAL_SPECがEXIT(0)の場合、シェルの終了時にARGが実行されます。 スクリプトが正常に終了したか、または受信したSIGINTか終了したかに関係なく適用されると信じていますSIGTERM。また、実験は私の信念を確認します: $ cat ./trap-exit #!/bin/bash trap 'echo TRAP' EXIT sleep 3 $ ./trap-exit & sleep 1; kill -INT %1 [1] 759 TRAP [1]+ Interrupt ./trap-exit $ ./trap-exit & sleep 1; kill -TERM %1 [1] 773 TRAP [1]+ Terminated ./trap-exit では、なぜそんなに多くの例がすべてをリストしているのINT TERM EXITでしょうか?または、私は何かをEXIT見逃しましたか?足裏が見逃す場合がありますか?
63 bash  shell  signals  trap 

6
すべてのバックグラウンドジョブを強制終了します
バックグラウンドジョブを強制終了するよりコンパクトな形式は次のとおりですか? for i in {1..5}; do kill %$i; done また、{1..5}には明らかにハードコードされたマジックナンバーがあります。どうすればNを正しい番号にして「N」にすることができますか。 $(jobs | wc -l) 実際にPS1で\ jを使用して管理対象ジョブの数を取得しますが、これは同等ですか?
63 bash 

6
STDERRとSTDOUTを異なる色で印刷するようにシェルを構成できますか?
端末を設定したいのでstderr、とは異なる色で印刷されstdoutます。たぶん赤。これにより、2つを区別しやすくなります。 これを設定する方法はあります.bashrcか?そうでない場合、これも可能ですか? 注:この質問はと合併した他を求めているstderr、stdout とユーザー入力のエコーで出力されるように3色展開。回答はどちらの質問にも対応している可能性があります。


5
ネストのインデントと一致するようにヒアドキュメントをインデントできません
スクリプティングに「最初の世界の問題」がある場合、これがそれです。 更新するスクリプトに次のコードがあります。 if [ $diffLines -eq 1 ]; then dateLastChanged=$(stat --format '%y' /.bbdata | awk '{print $1" "$2}' | sed 's/\.[0-9]*//g') mailx -r "Systems and Operations <sysadmin@[redacted].edu>" -s "Warning Stale BB Data" jadavis6@[redacted].edu <<EOI Last Change: $dateLastChanged This is an automated warning of stale data for the UNC-G Blackboard Snapshot …

6
zshにはどの機能があり、bashにはない、またはその逆ですか?
Linuxユーザーとして、私は常にbashを使用しました。これは、使用したすべてのディストリビューションでデフォルトであったためです。BSDなどの他のUnixシステムを使用している人々は、他のシェルをはるかに頻繁に使用しているようです。もう少し学ぶために、zshを試してみることにしました。 bashユーザーとして: どの機能が恋しいですか? そして、私は何に注意する必要がありますか?
62 bash  zsh 

3
bashrcが現在のシェルがインタラクティブかどうかを確認するのはなぜですか?
私のArchインストールで/etc/bash.bashrc、/etc/skel/.bashrc次の行が含まれています。 # If not running interactively, don't do anything [[ $- != *i* ]] && return Debianに/etc/bash.bashrcは、次のものがあります。 # If not running interactively, don't do anything [ -z "$PS1" ] && return そして/etc/skel/.bashrc: # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac man bashただし、によると、非対話型シェルはこれらのファイルも読み取りません。 …
62 bash  bashrc 

5
SSHおよびSCPの自動補完サーバー名
私はいくつかのサーバーが中に設定されている~/.ssh/configような、alphaとbeta。コマンドssh al<tab>とscp file.tgz al<tab>構成済みサーバーの名前をオートコンプリートするようにBashを構成するにはどうすればよいですか? サーバーを定期的に追加および削除し、リストが非常に大きいため、サーバーが追加されるたびに別のファイル(つまり、Bash配列)にサーバーを追加したくありません。
61 bash  ssh  autocomplete  scp 

11
「mv」を静かに失敗させる方法はありますか?
のようなコマンドmv foo* ~/bar/は、一致するファイルがない場合、stderrでこのメッセージを生成しますfoo*。 mv: cannot stat `foo*': No such file or directory ただし、このケースで作業しているスクリプトでは、まったく問題ないので、ログからそのメッセージを省略したいと思います。 mv何も動かされなかったとしても静かに言う良い方法はありますか?
61 bash  mv 

9
プログラムの実行時間を測定し、変数内に保存する方法
Bash(v4 +)スクリプト内の特定の操作にかかる時間を調べるために、timeコマンドからの出力を「別々に」解析し、(最終的に)Bash変数内にキャプチャします(let VARNAME=...)。 今、私はtime -f '%e' ...(またはcommand time -f '%e' ...Bashビルトインのために)使用していますが、実行されたコマンドの出力をすでにリダイレクトしているため、timeコマンドの出力をキャプチャする方法について本当に失われています。基本的にはここでの問題は、ある出力を分離するのをtime実行したコマンド(複数可)の出力から。 私が欲しいのは、コマンドを開始してから完了するまでの時間(整数)を数える機能です。timeコマンドまたはそれぞれの組み込みコマンドである必要はありません。 編集:以下の2つの有用な答えを考えて、2つの説明を追加したかった。 実行されたコマンドの出力を破棄したくありませんが、それがstdoutまたはstderrで終わるかどうかは実際には関係ありません。 間接的な方法よりも直接的な方法をお勧めします(つまり、出力を中間ファイルに保存するのではなく、直接キャッチします)。 dateこれまで使用していたソリューションは、私が望むものに近くなります。

7
.bash_historyの重複を削除するにはどうすればよいですか?
私はcontrol+rコマンド履歴を再帰的に検索するために使用することを本当に楽しんでいます。私はそれで使用したいいくつかの良いオプションを見つけました: # ignore duplicate commands, ignore commands starting with a space export HISTCONTROL=erasedups:ignorespace # keep the last 5000 entries export HISTSIZE=5000 # append to the history instead of overwriting (good for multiple connections) shopt -s histappend 私にとって唯一の問題は、erasedups連続した重複のみを消去することです-そのため、この一連のコマンドでは: ls cd ~ ls lsコマンドは、実際には2回記録されます。私は定期的にw / cronを実行することを考えました: cat .bash_history | sort | uniq …


3
「IFS = read -r line」を理解する
内部フィールド区切り変数に値を追加できることは明らかです。例えば: $ IFS=blah $ echo "$IFS" blah $ また、次の名前の変数にread -r lineデータを保存することも理解しstdinていますline: $ read -r line <<< blah $ echo "$line" blah $ しかし、コマンドはどのようにして変数値を割り当てることができますか?そして、それは最初からデータを格納しstdin、変数にline、その後の値与えるlineにはIFS?

3
前のコマンドまで「スクロール」した後のBASHを使用して、この履歴の次のコマンドに移動する方法を教えてください。
申し訳ありませんが、このタイトルは私がこれまでに考案した中で最もエレガントではありません。 しかし、私は多くの人々がこれを疑問に思っていると思います、そして、私の質問はだまされているかもしれません...私が言うことができるすべては私がそれを見つけなかったことです。 「スクロール」と言うときは、キーボードの「上矢印」キーを使用することを意味します。これは明らかに、最新のコマンドから開始して履歴を上にスクロールします。 だから、コマンドが30個ほど戻っているのを見つけて...それを実行します。そして、元々コマンドの後に実行したいコマンドを実行したい...これを行う簡単な方法はありますか?または、BASHに堪能な人はどのようにこれを行いますか?

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