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

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

6
トラップ、ERR、およびエラー行のエコー
トラップを使用してすべてのエラーで関数を呼び出すエラー報告を作成しようとしています: Trap "_func" ERR ERR信号の送信元の行を取得することはできますか?シェルはbashです。 それを行うと、使用されたコマンドを読んで報告し、いくつかのアクションを記録/実行できます。 それとも私はこれですべて間違っていますか? 私は以下でテストしました: #!/bin/bash trap "ECHO $LINENO" ERR echo hello | grep "asdf" そして$LINENO2を返しています。動作していません。

7
どのシェルを使用する必要があります-tcsh vs bash?[閉まっている]
私はtcsh今長い間使っています。しかし、何かを探しているときはいつでも、指定されたメソッドがbash特定のものであることがよくあります。シェルスクリプトの構文でさえ、2つでは異なります。 私がインターネットで検索と学習を経験bashしたことから、より一般的なシェルが使用されているようです。このサイトのタグ付けされた質問の数でさえ、bashタグ付けされtcshた質問の数よりもはるかに多い(現在5倍)。 だから、bashに切り替えるべきかどうか疑問に思っています。どう思いますか? なぜ固執するtcsh必要があるのbashですか
30 linux  shell  bash  fedora  tcsh 

5
$ REPLYが数値の範囲内にあるかどうかを確認します
Bashを使用してLinux用のシェルスクリプトを作成し、ビデオファイルをMP4に変換しています。そのために、私はavconvwith libvorbisfor audio を使用しています。 スクリプト内で、ユーザーに質問があります。 read -p "- Audio Quality [scale from -2 to 10] ? " if [ -n "$REPLY" ] ; then ABITRATE="-aq $REPLY" fi 私の「ABITRATE」文字列は最終的なavconvコマンドラインに入ります。 しかし、ユーザーにKb(キロビット)の値でその質問に答え、それをlibvorbis使用するスケールに変換する機会をユーザーに与えたいと思います。「-2から10までのスケール」は次のとおりです。 Quality Kbit/s Normalization ----------------------------- -2 ~32 y -1 ~48 y 0 ~64 y 1 ~80 y 2 ~96 y 3 ~112 …

5
一致しない場合にgrepが終了しないようにする
このスクリプトは「後」をエコーし​​ません。 #!/bin/bash -e echo "before" echo "anything" | grep e # it would if I searched for 'y' instead echo "after" exit また-e、shebang行のオプションを削除した場合も同様ですが、エラーが発生した場合にスクリプトが停止するように、それを保持したいです。grepが一致しないことをエラーと見なすことはありません。突然終了するのを防ぐにはどうすればよいですか?

2
シェルコマンドで!#:3とはどういう意味ですか
ackのインストールガイドでは、次のコマンドを使用してackスクリプトをインストールすることを推奨しています。 curl http://beyondgrep.com/ack-2.14-single-file > ~/bin/ack && chmod 0755 !#:3 私がいることを前提と!#:3終わりには後方参照のいくつかの種類であるが、それは何を意味するのでしょうか?zshに同等のものはありますか?Googleは役に立たなかった。

8
私のスクリプトに何か問題がありますか、それともBashはPythonよりずっと遅いですか?
ループを10億回実行して、BashとPythonの速度をテストしていました。 $ cat python.py #!/bin/python # python v3.5 i=0; while i<=1000000000: i=i+1; バッシュコード: $ cat bash2.sh #!/bin/bash # bash v4.3 i=0 while [[ $i -le 1000000000 ]] do let i++ done このtimeコマンドを使用すると、Pythonコードが完了するのに48秒しかかからず、Bashコードがスクリプトを強制終了するまでに1時間以上かかることがわかりました。 これはなぜですか?Bashの方が高速になると期待していました。私のスクリプトに何か問題がありますか、またはこのスクリプトでBashが本当に遅くなりますか?
29 bash  python3 

1
一部のコマンドでBASHプロセスの置換が機能しないのはなぜですか?
場合によっては、プロセスの置換が期待どおりに機能しません。以下に例を示します。 入力: gcc <(echo 'int main(){return 0;}') 出力: /dev/fd/63: file not recognized: Illegal seek collect2: error: ld returned 1 exit status 入力: ただし、別のコマンドで使用すると、期待どおりに機能します。 grep main <(echo 'int main(){return 0;}') 出力: int main(){return 0;} 私は他のコマンドで同様の失敗に気づきました(つまり、プロセス置換からのファイルを期待するコマンドは使用できない/dev/fd/63か、類似しています)。この障害gccは最新のものです。プロセスの置換がこの方法で失敗し、使用すべきでないときを判断するために知っておくべき一般的なルールはありますか? Ubuntu 12.04でこのBASHバージョンを使用しています(archおよびdebianでもこれを見ました): GNU bash、バージョン4.3.11(1)-release(i686-pc-linux-gnu)

3
いくつかのbashインスタンス内で実行されている正確なコマンドラインを確認するにはどうすればよいですか?
ループ内で複雑な一連のコマンドを実行しているbash(screenセッション内で)長時間実行されているインスタンスがあります(各ループはパイプ、リダイレクトなどを実行します)。 長いコマンドラインはターミナル内に記述されました-スクリプト内にはありません。これで、bashプロセスIDがわかりました。ルートアクセス権がありbashます。その中で実行されている正確なコマンドラインを確認するにはどうすればよいですか。 例 bash$ echo $$ 1234 bash$ while true ; do \ someThing | somethingElse 2>/foo/bar | \ yetAnother ; sleep 600 ; done そして、別のシェルインスタンスで、PID 1234内で実行されたコマンドラインを表示したいです。 bash$ echo $$ 5678 bash$ su - sh# cd /proc/1234 sh# # Do something here that will display the string \ 'while true …

7
コマンド実行後にBashを実行し続ける方法は?
私はこのような何かを実行したいと思います: bash -c "some_program with its arguments" しかし、対話型bashをsome_program終了後も実行し続けるには。 私はseys -cとして良い方法ではないと確信していman bashます: 対話型シェルは、非オプション引数なしで、および-cオプションなしで開始されたシェルです だからこれを行う方法は? 主な目標はここに記載されています 注意 私some_programは時々終了する必要があります 背景に置きたくない 私bashは他の何かをするために当時のままにしたい プログラムを再度実行できるようにしたい
29 bash 

6
シェル内の複数のファイルへのパイプ
ディスクに保存したくない大量のデータを生成するアプリケーションがあります。アプリケーションは主に、使用したくないデータを出力しますが、個別のファイルに分割する必要がある有用な情報のセットを出力します。たとえば、次の出力がある場合: JUNK JUNK JUNK JUNK A 1 JUNK B 5 C 1 JUNK 次のようにアプリケーションを3回実行できます。 ./app | grep A > A.out ./app | grep B > B.out ./app | grep C > C.out これは私が欲しいものを手に入れるだろうが、時間がかかりすぎるだろう。また、すべての出力を単一のファイルにダンプし、それを解析したくありません。 上記の3つの操作を組み合わせて、アプリケーションを1回実行するだけで3つの個別の出力ファイルを取得する方法はありますか?
29 bash  shell  grep  pipe 

1
bash caseステートメントはカスケードできますか?
私はこのようなことをしようとしています: case $level in 3) echo "Level Three" 2) echo "Level Two" 1) echo "Level one" ;; esac $ level = 3の場合、出力されます Level Three Level Two Level One 一方、$ level = 1の場合、出力のみになります Level One しかし、試してみると、エラーが発生しましsyntax error near unexpected token ')'た;;。 私が知っている他のすべての言語はこれを許可していますが、bashでそれを行う方法はありますか?「次のケースをあたかも一致したかのように実行する」という意味のキーワード

6
git [アクション]コマンド(スペースを含む)のエイリアスを作成するにはどうすればよいですか?
私のエイリアスのほとんどは次の形式です。 alias p='pwd' 私git commitはそれがするようにエイリアスしたいgit commit -v ただし、スペースを含むエイリアスを作成しようとするとエラーが発生します。 $ alias 'git commit'='git commit -v' -bash: alias: `git commit': invalid alias name
29 bash  shell  terminal  alias  git 

4
最後のコマンドをファイルに保存するにはどうすればよいですか?
bashシェルを使用して分析を実行しているとき、よく使用するコマンドを同じディレクトリ内のファイル(「LOGBOOK」と呼ばれる)に保存して、何を確認できるようにします。私はそれらの結果を取得しました。これまでのところ、これは、端末からコマンドをコピーして貼り付けるか、コマンドを "up"に押してコマンドをに変更するecho"my command" >> LOGBOOKか、他の同様のふざけを意味します。 history先日、ツールがあることに気付きましたが、以前に実行したコマンドを取得するためにそれを使用する方法が見つからないため、次のようなことができますgetlast >> LOGBOOK。 これを行うための素敵な簡単な方法はありますか。あるいは、他の人は、結果を得るためにコマンドを保存することにどのように対処しますか?


3
継続文字の後にコメントがあるbash複数行コマンド
検討する echo \ # this is a comment foo これは与える: $ sh foo.sh # this is a comment foo.sh: line 2: foo: command not found Webでいくつか検索した後、姉妹サイトのStack OverflowでDigitalRossのソリューションを見つけました。だからできること echo `: this is a comment` \ foo または代わりに echo $(: this is a comment) \ foo ただし、DigitalRossは、これらのソリューションが機能する理由を説明しませんでした。説明をお願いします。彼はコメントで答えた: 以前は、gotoこのように指定されたラベルに分岐するシェルコマンドがあり:ました。gotoなくなっていますが、まだ使用できる : whatever構文を... :今すぐ解析されたコメントの一種です。 しかし、移植性の議論を含め、詳細とコンテキストが欲しいです。 …
29 bash  shell 

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