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

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

9
デフォルト値でbashの変数を読み取る
bashスクリプトでターミナルから値を読み取る必要があります。ユーザーが変更できるデフォルト値を提供できるようにしたいと思います。 # Please enter your name: Ricardo^ このスクリプトでは、プロンプトは「名前を入力してください:」です。デフォルト値は「Ricardo」で、カーソルはデフォルト値の後にあります。これをbashスクリプトで行う方法はありますか?
191 bash  shell 

7
バッシュとシェルスクリプトの変数の大文字の修正
私はすべて大文字の変数を含む多くのシェルスクリプトを実行しますが、これには重大な誤解があると常に考えていました。私の理解では、慣例により(そしておそらく以前から必要に応じて)、環境変数はすべて大文字で記述されています。 しかし、Bashのような最近のスクリプト環境では、一時的な変数には小文字の名前を使用し、エクスポートされた(つまり環境)変数には大文字の名前を使用するという規則を常に優先してきました。例えば: #!/usr/bin/env bash year=`date +%Y` echo "It is $year." export JAVA_HOME="$HOME/java" それはいつも私の考えです。このアプローチに同意または反対する信頼できる情報源はありますか、それとも純粋にスタイルの問題ですか?

16
Bashスクリプトから現在のディレクトリを変更する
スクリプトから現在のディレクトリを変更することはできますか? Bashでディレクトリナビゲーション用のユーティリティを作成したい。次のようなテストスクリプトを作成しました。 #!/bin/bash cd /home/artemb Bashシェルからスクリプトを実行しても、現在のディレクトリは変更されません。スクリプトから現在のシェルディレクトリを変更することはまったく可能ですか?
190 bash  environment 

3
失敗するまで繰り返しシェルコマンドを実行しますか?
私が書いたファジーを信頼性の低い失敗をテストを作成しました。デバッグコードを追加しましたが、テストが失敗するまで実行して、デバッグ出力を収集したいと思います。 以下を使用して実行できるように、テストをセットアップしました。 ./runtest 私の現在の解決策はuntilfailスクリプトを書くことです: #!/bin/bash $@ while [ $? -eq 0 ]; do $@ done 次にそれを使用します: untilfail ./runtest より簡単な解決策はありますか?
190 bash 




6
stdin入力が空の場合、xargsコマンドを無視するにはどうすればよいですか?
次のコマンドを検討してください。 ls /mydir/*.txt | xargs chown root 目的は、すべてのテキストファイルの所有者mydirをroot に変更することです 問題は、その中に.txtファイルがない場合、mydirxargsはパスが指定されていないというエラーを表示することです。これはエラーがスローされるため無害な例ですが、ここで使用する必要があるスクリプトのように、空白のパスが現在のディレクトリであると見なされる場合があります。そのため、そのコマンドを実行した/home/tom/場合、結果がなく、そのls /mydir/*.txt下のすべてのファイルの/home/tom/所有者がルートに変更されます。 それで、どうすればxargsに空の結果を無視させることができますか?
188 bash  centos  xargs 

5
bashにスペースなしで16進文字のみを含むファイルの16進ダンプを作成する方法は?
Linuxでbashを使用してバイナリファイルの未変更の 16進ダンプを作成するにはどうすればよいですか?odそしてhexdumpコマンドダンプの両方の挿入空間を、これは理想的ではありません。 出力にスペースまたは改行を除いたすべての16進文字を含む長い文字列を単純に書き込む方法はありますか?
188 linux  bash  hex 

13
配列をbashのパラメーターとして渡す
配列をパラメーターとしてbash関数に渡すにはどうすればよいですか? 注:ここでスタックオーバーフローで回答が見つからなかった後、自分でやや粗雑な解決策を投稿しました。渡される配列は1つだけで、パラメーターリストの最後の要素になります。実際には、それは配列をまったく渡していませんが、called_function()によって配列に再構成されているその要素のリストを渡しますが、私にとってはうまくいきました。誰かがより良い方法を知っている場合は、ここに追加してください。
188 arrays  bash 

13
関数がbashに存在するかどうかを判別する
現在、bashから実行される単体テストをいくつか行っています。ユニットテストは、bashスクリプトで初期化、実行、クリーンアップされます。このスクリプトには、通常、init()、execute()、およびcleanup()関数が含まれています。ただし、必須ではありません。定義されているかどうかをテストしたいと思います。 私は以前ソースを手探りで落ち着かせることでこれを行いましたが、それは間違っているようでした。これを行うためのよりエレガントな方法はありますか? 編集:次のスニペットは魅力のように機能します: fn_exists() { LC_ALL=C type $1 | grep -q 'shell function' }

4
コマンドコードが無効です。ピリオドがエスケープされていますが、sedを使用しています
現在のクライアントでCVSの使用を強制され、リモートリポジトリのアドレスが変更された。ローカルコードでリモートアドレスを変更するために見つけることができる唯一の方法は、再帰的な検索と置換です。 ただし、sedコマンドを使用すると、動作するはずです。 find ./ -type f -exec sed -i "s/192.168.20.1/new.domain.com/" {} \; すべてのファイルでエラーが発生します。 sed: 1: ".//file/path ...": invalid command code . 私はsedの一致/置換のピリオドを回避しようとしましたが、それは何も解決しません。
187 bash  macos  sed 

7
whileループ内で変更された変数は記憶されません
次のプログラムで$fooは、最初のifステートメント内で変数に値1 を設定すると、ifステートメントの後にその値が記憶されるという意味で機能します。ただし、同じ変数をステートメントif内の内の値2に設定するとwhile、whileループの後で忘れられます。ループ$foo内で変数のある種のコピーを使用していて、whileその特定のコピーのみを変更しているように動作しています。ここに完全なテストプログラムがあります: #!/bin/bash set -e set -u foo=0 bar="hello" if [[ "$bar" == "hello" ]] then foo=1 echo "Setting \$foo to 1: $foo" fi echo "Variable \$foo after if statement: $foo" lines="first line\nsecond line\nthird line" echo -e $lines | while read line do if [[ "$line" == "second line" ]] …
187 bash  while-loop  scope  sh 

14
Linuxでシェル関数を見つける-exec?
findシェルで定義した関数を実行する方法はありますか?例えば: dosomething () { echo "doing something with $1" } find . -exec dosomething {} \; その結果は次のとおりです。 find: dosomething: No such file or directory 取得する方法があるfindのを-exec見るためにはdosomething?
185 linux  bash  shell  find  bsd 


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