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

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


3
「$ {PS1-}」は有効な構文であり、プレーンな「$ PS1」とどのように違いますか?
私が持っているスクリプトを見ています: if [ "${PS1-}" ]; then -PosixやBashの標準構文には見えないので、この最後のバグは少し気になります。それは永遠に存在していたこの難解な構文ですか、それともタイプミスですか?標準/ドキュメントへの参照をいただければ幸いです。 通常、私はそれをコーディングします: if [ "$PS1" ]; then どちらが正しいのですか、それとも違いがありますか?



3
/ dev / stdoutのターゲットの場所をbashスクリプトに保存する方法は?
最初の/dev/stdoutファイル記述子を他の場所に置き換える前に元の場所を保持したい特定のbashスクリプトがあります。 だから、当然、私は次のようなものを書きました old_stdout=$(readlink -f /dev/stdout) そして、それはうまくいきませんでした。問題が何であるかをすぐに理解します。 test@ubuntu:~$ echo $(readlink -f /dev/stdout) /proc/5175/fd/pipe:[31764] test@ubuntu:~$ readlink -f /dev/stdout /dev/pts/18 当然、$()サブシェルで実行され、親シェルにパイプされます。 質問は次のとおりです。/dev/stdout場所をbashスクリプトの文字列として保存するための信頼できる(Linuxディストリビューション間の移植性を考慮した)方法はありますか?

1
デバッグ用のBash変数の展開を参照してください?
変数を展開してbashコードを読みやすくするためのツール/トリックはありますか? たとえば、次を変換します。 DIR=/var/tmp FILE=${DIR}/file SCRIPT_ROOT=/opt/root TOOL=${SCRIPT_ROOT}/tool.sh ${TOOL} ${FILE} に: DIR=/var/tmp FILE=/var/tmp/file SCRIPT_ROOT=/opt/root TOOL=/opt/root/tool.sh /opt/root/tool.sh /var/tmp/file 私はBASHコードをPythonに変換していますが、BASH構文を読むのは面倒です。

4
Bashのビルトインexecの使用例/実用例
Bashの組み込みexecのドキュメントからこれを考慮してください。 execは、新しいプロセスを作成せずにシェルを置き換えます ユースケース/実用例を提供してください。これが理にかなっているのかわかりません。 私はグーグルでI / Oリダイレクトについて知りました。もっと説明してもらえますか?


4
シェルスクリプトでlogrotateを実装する方法
test.sh #!/bin/bash echo "Hello World" test2.sh #!/bin/bash while true do sh test.sh >> /script_logs/test.log & done logrotateを実装してログファイルサイズを制御したいので、状況が上記のような場合にlogrotateを実装するにはどうすればよいですか?

1
外部コマンドではなく、bashで組み込みの「time」コマンドを使用する
timeコマンドを使用してtime、外部のGNU timeコマンドではなく、組み込みのコマンドを使用する必要がある状況に遭遇しました/usr/bin/time。だから、どうすればこれを行うことができますか?私はどこかで使用enableおよび/またはcommand役立つだろうを見ましたが、彼らはしませんでした。 これはユースケースです: watch "time ls" 外部/usr/bin/timeコマンドを使用しますが、これは望ましくありません!これは、端末で次のようtimeに実行するときに内部bash関数を呼び出すと発生しますtime ls。 $ time ls 正反対の要求はここで回答されていることに注意してください。 bashにシェル組み込みではなく外部の `time`コマンドを使用させる 2つのコマンドには多くの違いがあります。内部timeはより正確ですが(必要な場合)、外部コマンドにはより多くのオプションがあります(必要ありません)。

4
bash動的(変数)変数名
要素の配列を操作して、文字列のシーケンスを動的に作成し、算術手続きを作成したい。 for name in FIRST SECOND THIRD FOURTH FIFTH; do $name = $(( $6 + 1 )) $name = "${$name}q;d" echo "${$name}"; printf "\n" done 欲望の結果は、$6equalsの場合以下になり0ます。 1q;d 2q;d 3q;d 4q;d 5q;d しかし、私はこのエラーを受け取ります reel_first_part.sh: line 18: FIRST: command not found reel_first_part.sh: line 19: ${$name}q;d: bad substitution reel_first_part.sh: line 18: FIRST: command …
12 bash  variable 

2
bashスクリプトの実行中にモジュールを読み込むことができないのはなぜですか?
モジュールを使用してシステム上のパッケージを制御python/2.7.2し、モジュールとしてインストールしました。単純なpython実行可能ファイルがpython_exe.pyあり、これを単純な「駆動」スクリプトから呼び出しますrunit.sh。runit.shスクリプトは次のようになります。 #!/bin/bash module load python/2.7.2 arg1=myarg1 arg2=15 arg3=$5 /path/to/python_exe.py -a $arg1 -b $arg2 -c $arg3 しかし、実行したばかりのとき./runit.sh、「モジュール:コマンドが見つかりません」というメッセージが表示されます。source runit.shただし、Iの場合、モジュールは正しくロードされます。どうしてこれなの?
12 bash  shell  python 

2
ディレクトリを表示し、ファイルを無視するように「cd」のコマンド補完を変更できますか?
bashのディレクトリにいるときにを押すと、ディレクトリ内のcd Space Tabすべてが表示されます。(Show all 1000 possibilities?)通常のファイルが多く、ディレクトリが比較的少ないディレクトリにいるとき、これは本当に面倒です。 だから、cdディレクトリのみを含めるようにオートコンプリートの選択をすることは可能ですか? 私はディレクトリ内のディレクトリリストを取得できることを知っています ls -d */ しかし、そこから先に進む方法がわかりません。 CentOS 6.6 Finalを使用しています。

2
ターミナルで使用可能な垂直線の数を確認するにはどうすればよいですか?
そこにcdしたときにディレクトリのgitログを表示するスクリプトを書いています。そのようなログは、数百行を含む圧倒的なものになる可能性があります。これまで、私はそれをハードコードされた20行(... | head -n 20)に制限してきました。これは職場の画面では問題ありませんが、自宅の小さなMacBook画面では多すぎます。 どちらの端末でも、ログが(垂直)画面の約半分を占めることを希望します。また、「ターミナル」も変更されます。職場ではGnomeターミナルですが、自宅ではiTerm2です。また、screenやtmuxも使用していません。 コマンドラインからターミナルで利用可能な垂直線の数を見つけるにはどうすればよいですか?

3
内部にコマンドがある文をどのように続けるのですか
たとえば、スクリプトファイルで "現在10人のユーザーがオンラインです"と言っています。 次の行の「現時点でオンラインの人々」の部分がなければ、コマンドを機能させることはできません。 現時点では、私は持っています w='who | wc -l' echo "There are $w people online at the moment" しかし、私は常に出力になります There are who | wc -l users online at the moment 途中でコマンドをどのように機能させるのですか?私は例を探してコピーしようとしましたが、それは私のコマンド置換の問題を解決しないようです。
12 bash  scripting 

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