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

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

4
ケース条件として変数を使用するにはどうすればよいですか?
ステートメントテスト|としてaで区切られた異なる文字列で構成される変数を使用しようとしていますcase。例えば: string="\"foo\"|\"bar\"" read choice case $choice in $string) echo "You chose $choice";; *) echo "Bad choice!";; esac ステートメントの最初の部分を入力fooまたはbar実行できるようにしcaseます。しかし、両方fooとbar第二に私を取ります: $ foo.sh foo Bad choice! $ foo.sh bar Bad choice! "$string"代わりに使用し$stringても違いはありません。どちらも使用しませんstring="foo|bar"。 私はこの方法でできることを知っています: case $choice in "foo"|"bar") echo "You chose $choice";; *) echo "Bad choice!";; esac さまざまな回避策を考えることができますがcase、bashの条件として変数を使用できるかどうかを知りたいです。それは可能ですか?

5
Unixシェルスクリプトですべてのサブディレクトリをトラバースし、何かを実行します
シェルスクリプトがメインディレクトリのすべてのサブディレクトリにアクセスするようにします。ディレクトリ内で何かを行い、出力をスプールファイルに送信し、次のディレクトリに移動します。Main Dir = / tmp Sub Dir = ABCD(4つのサブディレクトリ)を考慮してください

3
「eval」と「source / dev / stdin」の違いは何ですか?
以下の選択肢の間... でeval。 comd="ls" eval "$comd" と source /dev/stdin printf "ls" | source /dev/stdin とsource /dev/stdinと( )や{ } ( printf "ls" ) | source /dev/stdin { printf "ls"; } | source /dev/stdin (で実行printfするとき{ }、サブシェルを使用しないこと以外の利点はありますか?) それらの違いは何ですか? どちらが好ましいですか? コマンドを実行する好ましい方法はどれですか?()または{}?


9
他の言語のように引数を取るbash関数?
$PATHこのように設定するbash関数があります- assign-path() { str=$1 # if the $PATH is empty, assign it directly. if [ -z $PATH ]; then PATH=$str; # if the $PATH does not contain the substring, append it with ':'. elif [[ $PATH != *$str* ]]; then PATH=$PATH:$str; fi } しかし、問題は、変数ごとに異なる関数を作成する必要があることです(たとえば、$CLASSPATHlike assign-classpath()などの別の関数)。bash関数に引数を渡す方法を見つけることができなかったため、参照でアクセスできます。 次のようなものがあればもっといいでしょう- assign( bigstr, substr ) …
17 bash  bash-script 

2
現在の端末名を取得する方法は?
現在の端末名を取得するにはどうすればよいですか? psTTY列に表示される名前を意味します。例: root@dor-desktop:/home/dor/Documents/LAMP_setup/webs_install/do/install# ps aux | egrep 'mysql|(^USER)' USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND dor 2238 0.2 1.9 448052 79796 ? S 17:27 0:17 gedit /home/dor/Documents/LAMP_setup/webs_install/do/install/mysql.install /home/dor/Documents/LAMP_setup/webs_install/do/install/mysql.setup root 4975 0.1 0.5 324984 22876 ? S 18:12 0:04 gedit /usr/local/mysql/bin/mysqld_safe root 8160 0.0 0.0 4108 664 …
17 bash  terminal 

1
「inputrc」ファイルのキーバインディングのキー名の一般的な形式は何ですか?
inputrcファイル内のキーバインディングの形式は次のとおりです。 keyname: function-name or macro キーネームについては、次のようなものを見ました: "\e[B" "\e[1~" "\e[5D" "\M-l" "\C-[OD" "\e\e[D" これらのキー名の意味は何ですか?また、キー名の一般的な形式は何ですか?ドキュメントへのリンクを共有してください。
17 bash  readline 

4
特定のサブディレクトリの検索コマンド
のは、私はディレクトリ持っていると言うdir3つのサブディレクトリとしdir1... dir3。そして、内部には多くのファイルと他のサブディレクトリがあります。 *.c末尾を付けて、内部のファイルを検索したいのですが、サブディレクトリ「dir / dir2」とそのすべてのサブディレクトリのみを検索したいです。どうすればそれを定式化できますか? 私がいると仮定するとdir/: find . -name "*.c" すべてのディレクトリを検索します。 のみに制限するにはどうすればよいdir2ですか?
17 linux  bash  shell  find 

2
エイリアスと関数
bashマニュアルから エイリアスの定義と使用に関する規則はやや混乱しています。Bashは、その行でコマンドを実行する前に、少なくとも1行の入力を常に読み取ります。エイリアスは、コマンドが実行されたときではなく、読み取られたときに展開されます。したがって、別のコマンドと同じ行に表示されるエイリアス定義は、入力の次の行が読み取られるまで有効になりません。その行のエイリアス定義に続くコマンドは、新しいエイリアスの影響を受けません。この動作は、関数が実行されるときの問題でもあります。 エイリアスは、関数定義自体が複合コマンドであるため、関数の実行時ではなく、関数定義の読み取り時に展開されます。結果として、 関数で定義されたエイリアスは、その関数が実行されるまで利用できません。安全のため、エイリアス定義は常に別の行に配置し、複合コマンドではエイリアスを使用しないでください。 「関数が実行されるときではなく、関数定義が読み取られるときにエイリアスが展開される」と「関数が定義されたエイリアスは、その関数が実行されるまで使用できない」という2つの文は相反するようです。 それぞれの意味を説明できますか?
17 bash  alias  function 

2
ソースと なぜ異なる振る舞いですか?
最近知った . ./.a.aそして./.a.a同じです。 ただし、試行source source .a.aするとエラーが発生します。IMO、の.Bashエイリアスであるためsource、異なる動作をするべきではないので、何が欠けていますか? ボーナス、なぜ. .大丈夫なのにそうでsource sourceはないのですか?
17 bash 

3
bashで正確に2つの有効数字で浮動小数点数をフォーマットする方法は?
浮動小数点数をbashで正確に2桁の有効数字で出力したい(おそらくawk、bc、dc、perlなどの一般的なツールを使用して)。 例: 76543は76000として印刷する必要があります 0.0076543は0.0076として印刷する必要があります どちらの場合も、有効数字は7と6です。次のような同様の問題に対するいくつかの回答を読みました。 シェルで浮動小数点数を丸める方法は? 浮動小数点変数のbash制限精度 しかし、答えは、有効桁数の代わりに小数点以下の桁数を制限することに焦点を当てています(例:でのbcコマンドscale=2またはでのprintfコマンド%.2f)。 数字を正確に2桁の有効数字でフォーマットする簡単な方法はありますか、それとも独自の関数を作成する必要がありますか?
17 bash  awk  bc  floating-point  dc 

5
変数が定義されていない場合、スクリプトを実行しないでください
次のようなスクリプトがあります。 c=0 for f in */*; do cp -v "$f" "/myhome/CE$(printf '%0*d' 2 $BATCHNUM)-new-stuctures_extracted/test-$(printf '%0*d' 5 $c)" c=$((c=c+1)) done ただし、ユーザーは変数呼び出しBATCHNUMを提供する必要があり、そうでない場合は、このスクリプトの実行を強制的に停止する必要があります。このスクリプトを呼び出すスクリプト(または、このスクリプトを呼び出す#2スクリプトを呼び出す#1スクリプト)を強制的に停止させることができればさらに良いでしょう。

4
ターミナルを開き、9つのターミナルに分割し、1つのスクリプトを使用してそれらを切り替える方法
ターミナルを開き、9個の部分(3x3)に分割してbashスクリプトを実行したいと思います。ただし、各端末部分ごとに異なるスクリプトがあります。 これは、perl、python、またはbashを使用しても実行できますか? キーボードショートカットを使用せずにこれらの小さな端末を切り替えるにはどうすればよいですか? ああ、ところで、私はを使用していterminatorます。そして、そのような機能を有効にする他の端末エミュレータがある場合、それはどれですか?

3
if条件の括弧:空白なしで構文エラーが発生するのはなぜですか?
次のスクリプトを使用して、1年の2日間の開始時にスクリプトを実行するときに2日前に移動し、また毎月1日と2日目をチェックして2日前に移動します。 if [$month="01"] && [$day="01"]; then date="$last_month/$yes_day/$last_year" fulldate="$last_month/$yes_day/$last_year" else if [$month="01"] && [$day="02"]; then date="$last_month/$yes_day/$last_year" fulldate="$last_month/$yes_day/$last_year" else if [ $day = "01" ]; then date="$last_month/$yes_day/$year" fulldate="$year$last_month$yes_day" else if [ $day = "02" ]; then date="$last_month/$yes_day/$year" fulldate="$year$last_month$yes_day" else date="$month/$yes_day/$year" fulldate="$year$month$yes_day" fi fi fi fi しかし、私の悪いは、以下のエラーメッセージを取得しています Etime_script.sh: line 19: [06=01]: command not …

3
bash globstarマッチング
私はこのディレクトリ構造を持っています: ~/tmp/globstar ɀ find dir -type f dir/file.ext dir/subdir1/file.ext dir/subdir2/file.ext そして、globstarBashでオプションを有効にすると、私は言うことができます: ~/tmp/globstar ɀ ls -1 dir/**/*.ext dir/subdir1/file.ext dir/subdir2/file.ext 私の質問は、なぜdir/file.extこのリストから除外されるのですか? Bashマニュアルはこれについて述べていglobstarます: 設定されている場合、ファイル名展開コンテキストで使用されるパターン「**」は、すべてのファイルとゼロ個以上のディレクトリとサブディレクトリに一致します。パターンの後に「/」が続く場合、ディレクトリとサブディレクトリのみが一致します。 この段落の「ゼロ」にdir/file.extは、含めるべき印象があります。うまく行かない場合を除きます。
17 bash  wildcards 

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