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

Bashコマンドシェル用に記述されたスクリプトに関する質問。エラー/構文エラーのあるシェルスクリプトについては、ここに投稿する前に、shellcheckプログラム(またはhttps://shellcheck.netのWeb shellcheckサーバー)で確認してください。Bashのインタラクティブな使用に関する質問は、スタックオーバーフローよりもスーパーユーザーで話題になる可能性が高くなります。

2
MacとLinuxでターミナルを使用する場合の違いは何ですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? Stack Overflowのトピックとなるように質問を更新します。 8年前に閉鎖。 この質問を改善する 私は過去4年間Ubuntuを使用しています。 シェルコマンドの基本的な知識があり、GUIを使用するよりもターミナルで作業することを好みます。最近、Macを使い始めました。 Macターミナルでいくつかのターミナルコマンド(Ubuntuで使用)を試しましたが、ほとんど同じように応答するようです。 使用するコマンド、それらが実行するタスク、または注意が必要なシェル環境に大きな違いはありますか?
89 macos  bash  shell  ubuntu  terminal 

10
新しいMac OS Xターミナルウィンドウでコマンドを実行する
新しいMax OS X Terminal.appウィンドウでbashコマンドを実行する方法を理解しようとしています。例として、新しいbashプロセスでコマンドを実行する方法を次に示します。 bash -c "my command here" ただし、新しいウィンドウを作成する代わりに、既存のターミナルウィンドウを再利用します。私は次のようなものが欲しい: Terminal.app -c "my command here" しかし、もちろんこれは機能しません。「open -a Terminal.app」コマンドは知っていますが、引数をターミナルに転送する方法がわかりません。また、使用する引数を指定した場合でもわかりません。
89 macos  bash  terminal 


16
tar:.svnなどを含む現在のディレクトリ内のすべてのファイルとディレクトリを追加します
ディレクトリをtar.gzして使用しようとしています tar -czf workspace.tar.gz * 結果のtarには.svn、サブディレクトリにディレクトリが含まれますが、現在のディレクトリには含まれません(*tarに渡される前に「表示」ファイルのみに展開されるため) 私がしようとしました tar -czf workspace.tar.gz .代わりに、「。」が原因でエラーが発生します。読んでいる間に変更されました: tar: ./workspace.tar.gz: file changed as we read it *ディレクトリ内のすべてのファイル(ドットプレフィックスを含む)に一致するようにするトリックはありますか? (Linux SLES-11(2.6.27.19)でbashを使用)

2
bash補完のコンテキストでの$ {array [*]}と$ {array [@]}に関する混乱
私は初めてbashの補完を書くことに挑戦していますが、bash配列(${array[@]}と${array[*]})を逆参照する2つの方法について少し混乱しています。 これが関連するコードのチャンクです(ちなみに、それは機能しますが、もっとよく理解したいと思います): _switch() { local cur perls local ROOT=${PERLBREW_ROOT:-$HOME/perl5/perlbrew} COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} perls=($ROOT/perls/perl-*) # remove all but the final part of the name perls=(${perls[*]##*/}) COMPREPLY=( $( compgen -W "${perls[*]} /usr/bin/perl" -- ${cur} ) ) } bashのドキュメントによると: 配列の任意の要素は、$ {name [subscript]}を使用して参照できます。中括弧は、シェルのファイル名展開演算子との競合を避けるために必要です。下付き文字が「@」または「*」の場合、単語は配列名のすべてのメンバーに展開されます。これらの添え字は、単語が二重引用符で囲まれている場合にのみ異なります。単語が二重引用符で囲まれている場合、$ {name [*]}は各配列メンバーの値がIFS変数の最初の文字で区切られた単一の単語に展開され、$ {name [@]}は名前の各要素を展開します別の言葉に。 これでcompgen -W、可能な代替の単語リストを含む文字列が必要であることは理解できたと思いますが、このコンテキストでは、「$ {name [@]}が名前の各要素を個別の単語に展開する」とはどういう意味かわかりません。 短編小説:${array[*]}作品; ${array[@]}そうではありません。その理由を知りたいのですが、正確に何が${array[@]}拡大するのかをよりよく理解したいと思います。

7
配列内のインデックスまたはキーをチェックする最も簡単な方法は?
使用: set -o nounset 次のようなインデックス付き配列を持つ: myArray=( "red" "black" "blue" ) 要素1が設定されているかどうかを確認する最短の方法は何ですか? 私は時々以下を使用します: test "${#myArray[@]}" -gt "1" && echo "1 exists" || echo "1 doesn't exist" 好きなものがあるか知りたいのですが。 非連続インデックスを処理する方法は? myArray=() myArray[12]="red" myArray[51]="black" myArray[129]="blue" 51たとえば、すでに設定されているものをすばやく確認するにはどうすればよいですか? 連想配列を処理する方法は? declare -A myArray myArray["key1"]="red" myArray["key2"]="black" myArray["key3"]="blue" key2たとえば、すでに使用されているものをすばやく確認するにはどうすればよいですか?
89 arrays  bash  indexing  key 

3
隠しファイルのないcp-r
2つのディレクトリがあり、1つは空です。 最初のディレクトリには、隠しファイルを含む多くのサブディレクトリがあります。cp -r最初のディレクトリから2番目のディレクトリにコンテンツを追加すると、隠しファイルもコピーされます。それらを回避するための解決策はありますか?
89 linux  bash  cp 

4
bashスクリプトを実行するときに行番号を表示する方法
私は、コマンドをたくさん持っているし、出力の多くを生成しますテストスクリプトを持っている私が使用しset -xたりset -vとset -e、そのエラーが発生したときにスクリプトが停止します。ただし、問題を特定するために実行が停止した行を特定することは、依然としてかなり困難です。各行が実行される前にスクリプトの行番号を出力できる方法はありますか?または、set -x?によって生成されたコマンド展示の前に行番号を出力します。または、スクリプト行の場所の問題に対処できる方法があれば、非常に役立ちます。ありがとう。
89 linux  bash  testing 

13
sedを使用してファイルの名前を一括変更
目的 これらのファイル名を変更します。 F00001-0708-RG-biasliuyda F00001-0708-CS-akgdlaul F00001-0708-VF-hioulgigl これらのファイル名に: F0001-0708-RG-biasliuyda F0001-0708-CS-akgdlaul F0001-0708-VF-hioulgigl シェルコード テストする: ls F00001-0708-*|sed 's/\(.\).\(.*\)/mv & \1\2/' 実行するには: ls F00001-0708-*|sed 's/\(.\).\(.*\)/mv & \1\2/' | sh 私の質問 sedのコードがわかりません。置換コマンドが何であるかを理解しています $ sed 's/something/mv' 手段。そして、正規表現はある程度理解できます。しかし、私はここで何が起こっているのか理解していません: \(.\).\(.*\) またはここ: & \1\2/ 前者は、私には、「単一の文字、単一の文字、単一の文字の任意の長さのシーケンス」を意味するように見えますが、確かにそれ以上のものがあります。後半まで: & \1\2/ 何も思いつきません。
89 bash  shell  sed  file-rename 


4
Bashifステートメントでの正規表現の一致
私はここで何を間違えましたか? スペース、小文字、大文字、または数字を含む文字列に一致させようとしています。特殊文字もいいのですが、それは特定の文字をエスケープする必要があると思います。 TEST="THIS is a TEST title with some numbers 12345 and special char *&^%$#" if [[ "$TEST" =~ [^a-zA-Z0-9\ ] ]]; then BLAH; fi これは明らかに、上部、下部、数値、およびスペースのみをテストします。しかし、動作しません。 *更新* もっと具体的にすべきだったと思います。これが実際の実際のコード行です。 if [[ "$TITLE" =~ [^a-zA-Z0-9\ ] ]]; then RETURN="FAIL" && ERROR="ERROR: Title can only contain upper and lowercase letters, numbers, and spaces!"; …

9
特定のタイプのファイルのみのディレクトリをどのように比較しますか?
再帰的なディレクトリdiffが必要なのに、特定のファイルタイプのみが必要な場合、diffコマンドについて質問があります。どうすればよいですか? 除外オプションを使用しようとしましたが、使用できるパターンは1つだけです。 $ diff /destination/dir/1 /destination/dir/2 -r -x *.xml コマンドを使用して、私は、フォルダの画像の種類のファイルが(あるにもかかわらず、xmlファイルの種類を除外することができpng、gif、jpg、) txt、phpなど、 特定のファイルタイプのみを比較する方法。
88 linux  bash 

4
シェルワイルドカード文字の拡張を停止しますか?
コンパイルされたコマンドラインプログラムがbashまたはcshに、パラメーター内のワイルドカード文字を展開したくないことを通知する方法はありますか? たとえば、次のようなシェルコマンドが必要になる場合があります。 foo * その文字のASCII数値を返すだけです。
88 bash  wildcard 

7
プロセスを正常にシャットダウンするために、どのような順序でシグナルを送信する必要がありますか?
別の質問のこの回答に対するコメントで、コメント投稿者は次のように述べています。 どうしても必要な場合を除いて、kill-9を使用しないでください。SIGKILLをトラップできないため、強制終了されたプログラムは、一時ファイルを消去するなどのシャットダウンルーチンを実行できません。最初にHUP(1)、次にINT(2)、次にQUIT(3)を試してください。 原則的には同意しますSIGKILLが、残りは私にとってのニュースです。によって送信されるデフォルトのシグナルkillがSIGTERMであるとすると、任意のプロセスを正常にシャットダウンするために最も一般的に期待されるシグナルであると思います。また、SIGHUPデーモンに「構成ファイルを再読み取り」するように指示するなど、終了しない理由で使用されることもあります。そして、SIGINT(Ctrl-Cで通常発生するのと同じ割り込みですよね?)は、本来あるべきほど広くサポートされていないか、かなり不自然に終了しているように思われます。 それSIGKILLが最後の手段であるとすると、可能な限り正常にシャットダウンするために、どのシグナルをどの順序で任意のプロセスに送信する必要がありますか? 可能であれば、(個人的な好みや意見を超えて)裏付けとなる事実や参考文献であなたの答えを実証してください。 注:bash / Cygwinの検討を含むベストプラクティスに特に興味があります。 編集:これまでのところ、INTやQUITについては誰も言及していないようで、HUPについての言及は限られています。これらを整然としたプロセス殺害に含める理由はありますか?

12
bashでタプルをループしますか?
bashでタプルをループすることは可能ですか? 例として、以下が機能する場合は素晴らしいでしょう: for (i,j) in ((c,3), (e,5)); do echo "$i and $j"; done どういうわけかタプルをループさせる回避策はありますか?
88 bash  for-loop 

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