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

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

7
コマンドライン引数をBashの配列に変換する
コマンドライン引数をbashスクリプト配列に変換するにはどうすればよいですか? 私はこれを取りたい: ./something.sh arg1 arg2 arg3 そしてそれを myArray=( arg1 arg2 arg3 ) スクリプトでさらに使用するためにmyArrayを使用できるようにします。 この前回のSOの投稿は間近に迫っていますが、配列の作成方法については触れていません。Bashでコマンドライン引数を解析するにはどうすればよいですか? 引数を通常のbashスクリプト配列に変換する必要があります。他の言語(Pythonなど)を使用できることはわかっていますが、bashでこれを行う必要があります。「追加」機能または同様の何かを探していると思いますか? 更新:私はまた、ゼロ引数をチェックしてデフォルトの配列値を割り当てる方法を尋ねたかったのですが、以下の回答のおかげで、これを機能させることができました: if [ "$#" -eq 0 ]; then myArray=( defaultarg1 defaultarg2 ) else myArray=( "$@" ) fi
160 arrays  bash  shell 

11
RVMは機能ではありません。「rvm use…」でルビーを選択しても機能しません
Rubyバージョンを一覧表示する console:~$ rvm list rvm rubies ruby-2.0.0-p481 [ i686 ] # => - current # =* - current && default # * - default Rubyの特定のバージョンを使用してみてください console:~$ rvm use 2.0.0 RVM is not a function, selecting rubies with 'rvm use ...' will not work. You need to change your terminal emulator …
160 ruby  bash  rvm 

5
正規表現を使用してbashで検索して置換する
私はこの例を見ました: hello=ho02123ware38384you443d34o3434ingtod38384day echo ${hello//[0-9]/} これはこの構文に従います: ${variable//pattern/replacement} 残念ながら、patternフィールドは完全な正規表現構文をサポートしていないようです(たとえば、.またはを使用\sすると、リテラル文字と一致しようとします)。 完全な正規表現構文を使用して文字列を検索/置換するにはどうすればよいですか?
160 regex  bash 

4
Bashスクリプト-実行するコマンドとしての可変コンテンツ
ファイルの行に対応する乱数を定義済みリストにしてくれるPerlスクリプトがあります。次に、を使用してこれらの行をファイルから抽出しますsed。 #!/bin/bash count=$(cat last_queries.txt | wc -l) var=$(perl test.pl test2 $count) 変数varは次のような出力を返しますcat last_queries.txt | sed -n '12p;500p;700p'。問題は、この最後のコマンドを実行できないことです。で試しました$varが、出力が正しくありません(コマンドを手動で実行した場合、正常に機能するため問題はありません)。これを行う正しい方法は何ですか? PS:もちろん、Perlですべての作業を行うことができますが、他の状況でも役立つので、この方法を学習しようとしています。
159 bash 

12
bashスクリプトをデバッグする方法は?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 2年前休業。 この質問を改善する bashスクリプトをデバッグする方法はありますか?たとえば、「calling line 1」、「calling line 2」などのような実行ログを出力するものです。
159 bash  shell 

3
bashスクリプトでソースを使用すると「ソース:見つかりません」エラーが発生する
私は(私が思っていたものと思われる)簡単なbashスクリプトを書こうとしています: virtualenvを実行して$ 1で新しい環境を作成します 仮想環境をアクティブ化 さらにいくつかのことを行う(djangoをインストールする、django-admin.pyをvirtualenvのパスに追加するなど) ステップ1はかなりうまく機能しますが、virtualenvをアクティブ化できないようです。virtualenvに慣れていない場合はactivate、仮想環境をアクティブにするファイルを作成します。CLIから、次を使用して実行しますsource source $env_name/bin/activate $ env_nameは、明らかに、仮想環境がインストールされているディレクトリの名前です。 私のスクリプトでは、仮想環境を作成した後、次のようにアクティベートスクリプトへのパスを保存します。 activate="`pwd`/$ENV_NAME/bin/activate" しかし、私が電話するとsource "$activate"、私はこれを受け取ります: /home/clawlor/bin/scripts/djangoenv: 20: source: not found これ$activateには、アクティブ化スクリプトへの正しいパスが含まれています。実際、呼び出す前にファイルが存在するかどうかもテストしていますsource。しかし、sourceそれ自体はそれを見つけることができないようです。また、CLIですべての手順を手動で実行してみましたが、すべて正常に機能します。 私の研究では、このスクリプトが見つかりました。これは、私が望むものに似ていますが、すべての仮想環境を〜/ .virtualenvディレクトリ(または、 $ WORKON_HOME)。しかし、彼はへのパスを作成し、基本的に私と同じ方法でactivate呼び出しsource "$activate"ているようです。 スクリプト全体を次に示します。 #!/bin/sh PYTHON_PATH=~/bin/python-2.6.1/bin/python if [ $# = 1 ] then ENV_NAME="$1" virtualenv -p $PYTHON_PATH --no-site-packages $ENV_NAME activate="`pwd`/$ENV_NAME/bin/activate" if [ ! -f "$activate" ] then echo …
159 bash  virtualenv 


6
$$が親プロセスと同じIDを返すのはなぜですか?
Bashに問題があり、その理由がわかりません。 シェルの下で、次のように入力します。 echo $$ ## print 2433 (echo $$) ## also print 2433 (./getpid) ## print 2602 「getpid」は、次のように現在のpidを取得するCプログラムです。 int main() { printf("%d", (int)getpid()); return 0; } 私を混乱させるのはそれです: 「(コマンド)」はサブプロセスだと思います(正しいですか?) プログラムを使用して括弧内のpidを表示すると、表示されるpidが異なりますか? 「$$」はマクロのようなものですか? 手伝って頂けますか?
159 bash  shell  pid  subshell 

13
Bashの動的変数名
私はbashスクリプトについて混乱しています。 私は次のコードを持っています: function grep_search() { magic_way_to_define_magic_variable_$1=`ls | tail -1` echo $magic_variable_$1 } コマンドの最初の引数を含み、たとえばの最後の行の値を含む変数名を作成できるようにしたいと思いますls。 だから私が欲しいものを説明するために: $ ls | tail -1 stack-overflow.txt $ grep_search() open_box stack-overflow.txt では、$magic_way_to_define_magic_variable_$1スクリプト内でどのように定義/宣言し、どのように呼び出す必要がありますか? 私が試してみましたeval、${...}、\$${...}、私はまだ混乱しています。

10
シェルスクリプトのディレクトリにあるファイルのリストを取得するにはどうすればよいですか?
シェルスクリプトを使用してディレクトリの内容を取得しようとしています。 私のスクリプトは: for entry in `ls $search_dir`; do echo $entry done ここで、$search_dir相対パスです。ただし、$search_dir名前に空白を含む多くのファイルが含まれています。その場合、このスクリプトは期待どおりに実行されません。 を使用できることはわかっていますがfor entry in *、これは現在のディレクトリでのみ機能します。 そのディレクトリに移動し、使用しfor entry in *てから元に戻すことができることはわかっていますが、私の特定の状況では、それを行うことができません。 私には2つの相対パス$search_dirとがあり$work_dir、両方で同時に作業し、それらを読み取り、ファイルの作成/削除などを行う必要があります。 だから私は今何をしますか? PS:私はbashを使用しています。

7
Bash foreachループ
入力があります(ファイルとしましょう)。各行にファイル名があります。このファイルを読み取って、それぞれのコンテンツを表示するにはどうすればよいですか。
158 bash  foreach 

4
UNIXエクスポートコマンド[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? Stack Overflowのトピックとなるように質問を更新します。 8年前に閉鎖。 この質問を改善する exportコマンドの使い方を理解しようとしています。 を使ってみましman exportたが、このコマンドのマニュアルがありません。 誰かexportがUNIXでのの使用を理解するのを手伝ってくれませんか?
158 bash  shell  unix 

10
Linux、DSTセーフのbashで昨日の日付を取得する
Linuxで実行するシェルスクリプトがあり、この呼び出しを使用して昨日の日付を取得します YYYY-MM-DD形式でます。 date -d "1 day ago" '+%Y-%m-%d' ほとんどの場合それは機能しますが、スクリプトが昨日の朝実行された2013-03-11 0:35 CDTときに戻りました"2013-03-09"なくました"2013-03-10"。 おそらく、(昨日から始まった)夏時間のせいです。私は"1 day ago"それが実装されている方法が24時間減算された方法を推測し、24時間前2013-03-11 0:35 CDTはそれでした2013-03-09 23:35 CST、それはの結果につながりました"2013-03-09"。 では、Linuxのbashで昨日の日付を取得するためのDSTセーフの優れた方法は何でしょうか。
158 linux  bash 

11
Bash:無限のスリープ(無限のブロック)
私はstartxを評価するXを起動するために使用し.xinitrcます。私では、.xinitrcを使用してウィンドウマネージャーを起動し/usr/bin/mywmます。(他のWMをテストするために)WMを終了すると、.xinitrcスクリプトがEOFに達したため、Xも終了します。だから私は私の最後にこれを追加しました.xinitrc: while true; do sleep 10000; done このようにして、WMを終了してもXは終了しません。さて私の質問:どうすれば無限の睡眠をとることができますかループスリープの代わりにですか?スクリプトをフリーズするようなコマンドはありますか? 宜しくお願いします
158 linux  bash  sleep  infinite 

11
バッシュ継続行
bash継続行をどのように使用しますか? 私はあなたがこれを行うことができることを理解しています: echo "continuation \ lines" >continuation lines ただし、インデントされたコードがある場合、うまく機能しません。 echo "continuation \ lines" >continuation lines
158 bash  line  indentation 

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