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

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

2
関数名で%%はどういう意味ですか?
の出力を見ると、env次の関数もあることがわかりました。 BASH_FUNC_mc%%=() { . /usr/share/mc/mc-wrapper.sh } /usr/share/mc/mc-wrapper.shファイルの内容は次のとおりです。 MC_USER=`id | sed 's/[^(]*(//;s/).*//'` MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$" /usr/bin/mc -P "$MC_PWD_FILE" "$@" if test -r "$MC_PWD_FILE"; then MC_PWD="`cat "$MC_PWD_FILE"`" if test -n "$MC_PWD" && test -d "$MC_PWD"; then cd "$MC_PWD" fi unset MC_PWD fi rm -f "$MC_PWD_FILE" unset MC_PWD_FILE 何をする%%文字は、関数名に意味ですか?特定の場合に呼び出される関数にしますか、それとも他の関数とは異なる方法で呼び出すことができますか? openSUSE 42.3とBashバージョン4.3.42(1)-release(x86_64-suse-linux-gnu)を使用していますが、違いがある場合は、

3
ソースlib / *が機能しないのはなぜですか?
次のフォルダー構造を含む小さなプログラムがあります。 - main.sh - lib/ - clean.sh - get.sh - index.sh - test.sh 各ファイルには、で使用する1つの関数が含まれていますmain.sh。 main.sh: source lib/* get_products clean_products make_index test_index 上記では、最初の2つの関数は機能しますが、2番目の2つは機能しません。 それでも私source lib/*が次のように置き換えた場合: source lib/get.sh source lib/clean.sh source lib/index.sh source lib/test.sh すべてが期待どおりに機能します。 誰もがなぜsource lib/*期待どおりに機能しないのか知っていますか?
11 bash  source 

2
バッシュ:エスケープを4回押す
bashターミナルでエスケープを4回押すと、次のように表示されます。 -bash-4.1$ Display all 2837 possibilities? (y or n) : ! ./ [ [[ ]] { } 411toppm a2p ac accept accton aclocal aclocal-1.11 acpi_listen この機能とは何ですか?これらのエントリはどのようにして見つけられますか?(2回目のEscを押すと、端末が警告音を発します。)
11 bash 

2
bashファイル名の拡張(グロビング)の最大数はありますか?ある場合、それは何ですか?
bashファイル名の拡張(グロビング)の最大数はありますか?ある場合、それは何ですか?参照してくださいグロブ tldp.orgに。 ファイルのサブセットに対してコマンドを実行したいとしましょう: grep -e bar foo* rm -f bar* bashが展開するファイルの数に制限はありますか?ある場合、それは何ですか? これらの操作を実行する別の方法を探していません(たとえばを使用してfind)。

4
ディレクトリを除くファイルをループする
サブディレクトリを除く現在のディレクトリ内のすべてのファイルに対して何かを行うスクリプトが必要です。 たとえば、現在のパスには5つのファイルがありますが、そのうちの1つはフォルダ(サブディレクトリ)です。私のスクリプトは、スクリプトを実行するときに引数として指定されたコマンドをアクティブにする必要があります。つまり、「bash script wc -w」は、現在のディレクトリ内の各ファイルのワードカウントを提供する必要がありますが、どのフォルダも出力しないため、出力に「/ sub / dir:Is a directory」行は含まれません。 私の現在のスクリプト: #!/bin/bash dir=`pwd` for file in $dir/* do $* $file done ループのディレクトリを除外する必要があるだけですが、方法はわかりません。
11 bash  for 


2
bashは16進数値0x00を変数に格納できません
私はddでいくつかのトリックをしようとしています。私はそれをddにパイプするために "header"と呼ばれる変数にいくつかの16進値を格納することは可能だと思いました。 変数を使用しない最初のステップは次のとおりです。 $ echo -ne "\x36\xc9\xda\x00\xb4" |dd of=hex $ hd hex 00000000 36 c9 da 00 b4 |6....| 00000005 その後、私はこれを試しました: $ header=$(echo -ne "\x36\xc9\xda\x00\xb4") $ echo -n $header | hd 00000000 36 c9 da b4 |6...| 00000004 ご覧のとおり\x00、$header変数の値が失われました。誰かがこの動作の説明をしていますか?これは私を夢中にさせています。
11 linux  bash  shell-script  dd 

2
ゾンビが子供を待っているのはなぜですか?
私はさまざまな情報源を掘り下げていますが、子刈りの解剖学についての適切な説明が見つかりません。これは私が理解したいことの単純なケースです。 $ cat <( sleep 100 & wait ) & [1] 14247 $ ps ax -O pgid | grep $$ 12126 12126 S pts/17 00:00:00 bash 14248 12126 S pts/17 00:00:00 bash 14249 12126 S pts/17 00:00:00 sleep 100 14251 14250 S pts/17 00:00:00 grep --color=auto 12126 $ kill -2 …

1
インタラクティブに使用することを目的とした関数での使用法コメントの表示
私は、.bashrcターミナルでインタラクティブに使用することを意図して、いくつかの関数を定義しています。私は通常、それらの前に、その使用目的を説明するコメントを付けます。 # Usage: foo [bar] # Foo's a bar into a baz foo() { ... } これは、ソースコードを参照する場合は問題ありtypeませんが、関数が何を実行するかをすばやく思い出させるためにターミナルで実行すると便利です。ただし、これには(当然のことながら)コメントは含まれていません。 $ type foo foo is a function foo () { ... } 「このようなコメントtypeが表示され、表示されるようになっていたらいいのではないか」と私は思いました。そして、Pythonのdocstringsの精神で私はこれを思いつきました: foo() { : Usage: foo [bar] : "Foo's a bar into a baz" ... } $ type foo foo is …

2
「ローカル」に終了コードをキャプチャさせる方法は?
私のプロジェクトには次のスニペットがあります: local output="$(bash "${1##*/}")" echo "$?" これにより、常に0が出力されますlocalが、削除するlocalと、$?変数が正しく動作します。これは、サブシェルからの終了コードを想定しています。 私の質問は、終了値をキャプチャしながら、この変数をローカルに保つにはどうすればよいですか?


1
`-`で` -a`または `-o`演算子を使用しないでください
StéphaneChazelasが書いた: いくつかのルール 常に変数を引用する -aor -o演算子を使用しないでください(いくつかの[コマンドと&&andおよび||shell演算子を使用します) 作る[POSIXシェルで信頼性の高いです。 なぜ「-aまたは-o演算子を使用しない」のですか? 「いくつかの[コマンドと&&andおよび||shell演算子を使用する」にはどうすればよいですか?
11 bash  shell  test 

2
ファイル内の各文字の(数値)ASCII値を出力するにはどうすればよいですか?
各文字のASCII数値をテキストファイルに出力する方法を教えてください。と同様catですが、ASCII値のみを表示しています...(16進数または10進数で問題ありません)。 Apple(改行付き)という単語を含むファイルの出力例は次のようになります。 065 112 112 108 101 013 004
11 linux  bash  sed  awk  terminal 

3
ファイルを削除しますが、シンボリックリンクの場合のみ
理想的にはこのようなコマンドが欲しい rm --only-if-symlink link-to-file ファイルを指すシンボリックリンクではなく、誤ってファイルを削除して何度も火傷したためです。これは、sudoが関係する場合に特に悪い場合があります。もちろん、ls -al実際にシンボリックリンクなどであることを確認するためにa を実行しますが、これはオペレーターのエラー(同じ名前のファイル、タイプミスなど)と競合状態(誰かが何らかの理由でファイルを削除したい場合)に対して脆弱です。ファイルがシンボリックリンクかどうかを確認し、1つのコマンド内にある場合にのみ削除する方法はありますか?
11 bash  command-line  rm 

3
コマンドのbashスクリプトの一時的な値
以下のコマンドのように、 if true; then IFS=":" read a b c d e f <<< "$test" 本は、IFS ":"メインコマンド(read a b c d e f <<< "$value")の前に値割り当てコマンド()を使用すると、その値が一時的にメインコマンドで有効になると述べています。したがって、readコマンドは区切り文字を使用します:。 しかし、このコマンドのように、 if true; then HOME="hello" echo "$HOME" エコーメッセージはhelloではありません。上記のコマンドの本当の意味は何ですか?

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