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

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

6
フルパスを指定せずに、Bashビルトインの代わりにシステムコマンドを使用する
私は対話型シェルとしてBashを使用していますが、両方が同じ名前を共有している場合、Bashにシェル組み込みコマンドの代わりにシステムコマンドを実行させる簡単な方法があるかどうか疑問に思っていました。 たとえば、次のシステムを使用してkill(からutil-linux)シグナルを送信する代わりに、指定されたプロセスのプロセスID(pid)を出力します。 $ /bin/kill -p httpd 2617 ... システムコマンドのフルパスを指定しないと、システムコマンドの代わりにBashビルトインが使用されます。kill組み込みは持っていない-pコマンドが失敗したように、オプションを: $ kill -p httpd bash: kill: p: invalid signal specification Make bashがシェル組み込みではなく外部の `time`コマンドを使用するようにリストされている回答を試しましたtimeが、実際にはシェルキーワードであり、シェル組み込みではないため、ほとんどが機能します。 で一時的にBashビルトインを無効にする以外にenable -n kill、これまでに見た中で最良の解決策は以下を使用することです: $(which kill) -p httpd シェルビルトインの代わりに外部コマンドを実行する他の簡単な(タイピングが少ない)方法はありますか? これkillは単なる例であり、組み込みコマンドをプレフィックスとして使用すると、外部コマンドと同じ名前の関数が実行されないようにする一般的なソリューションcommandが必要です。ほとんどの場合、新しいプロセスをフォークする必要がないため、組み込みバージョンを使用することを好みます。また、組み込みコマンドには外部コマンドにはない機能がある場合があります。

3
バックグラウンドで無限ループを実行する方法
スクリプトの実行を続けながら、バックグラウンドで無限ループを実行するにはどうすればよいですか? 「スクリプト」の例: while true; do something_in_the_background; done do_something_while_the_loop_goes_on_in_the_background for 1 2 3; do somethingelse; done exit 0 これ(に注意&)は、しばらくしてシステム全体をクラッシュさせるようです: while true; do something_in_the_background & done do_something_while_the_loop_goes_on_in_the_background for 1 2 3; do somethingelse; done exit 0
17 bash 

4
あるプログラムの標準入力を引数として別のプログラムに渡すにはどうすればよいですか?
2つの引数を取るプログラムが存在するとします。入力ファイルと出力ファイル。 この出力ファイルをディスクに保存するのではなくstdin、別のプログラムに直接渡す場合はどうなりますか。これを達成する方法はありますか? Linuxで出くわす多くのコマンドには、出力ファイルの引数として「-」を渡すオプションがあります。これは、上記で指定したことを行います。これstdinは、プログラムのを引数として渡すことができないためですか?もしそうなら、どうすればいいのでしょうか? これを使用してどのようにイメージするかの例は次のとおりです。 pdftotext "C BY BRIAN W KERNIGHAN & DENNIS M RITCHIE.pdf" stdin(echo) 私が使用しているシェルはbashです。

1
不完全なディレクトリ名が与えられたときにcdが自動的に選択するのは標準的な動作ですか?
と呼ばれる3つのフォルダーProjectAがProjectBありProjectCます。をtab完了cdしてcd Projectを押すとEnter、が選択されProjectCます。これは、他の同様のケースにも当てはまることがわかりました。デフォルトでは、辞書式順序で最後になります(ただし、これは最後に変更/追加された可能性もあります)。 これはのデフォルトの動作cdですか?ここで誤って何かを設定しましたか? OSX 10.10.3をbash 4.3で実行しています。

4
パイプの隣のスペース
私が見たhistory | grep blahとhistory |grep blah; そしてhistory|grep blah誰もそれを使用するようだけれどもまた、動作します。 スペースに意味はありますか(例:異なるコマンドへの/からのパイプにはスペースの異なる使用が必要です)、またはそれは常に任意ですか?
17 bash  shell  pipe 

3
shスクリプトの実行:実行可能ビットとルート権限にもかかわらず、«許可が拒否されました»
DebianをVirtualBoxにインストールし(通常はシステムを破壊するさまざまな実験のために)、VirtualBoxゲストアドオンスクリプトを起動しようとしました。rootとしてログインして起動しようとしましたがautorun.sh、«Permission denied»になりました。ls -lスクリプトに実行権があることを示しています。 申し訳ありませんが、出力をコピーすることはできません-VirtualBoxはアドオンなしではまったく役に立ちません。共有ディレクトリも共有クリップボードも機能しないからです。しかし、念のため、私は手で権利をコピーしました。 #ls -l ./autorun.sh -r-xr-xr-x 1 root root 6966 Mar 26 13:56 ./autorun.sh 最初は、スクリプトがエラーを発生させた何かを実行しているのではないかと考えました。の/bin/shようなものに置き換えようとしました#/pathtorealsh/sh -xvが、出力がありませんでした。スクリプトを実行することさえできないようです。 何がそれを引き起こすのかさえ私には分かりません。

2
失われたエイリアスを取得する方法は?
.bash_aliasesファイルにエコーコマンドを作成し、テストエイリアスを除くすべてのエイリアスを消去しました。ただし、エイリアスが(tcl?に)ロードされたセッションが開いたままです。このセッションからそれらを取得できますか?

2
bashスクリプトを実行したユーザーの名前をsudoとして取得する方法は?
sudoで実行する必要があるが、それを実行した非sudoユーザーの名前を考慮する必要があるbashスクリプトを作成したい。したがって、ユーザーbobが実行した場合、それを実行したのが知りsudo ./myscript.shたいと思います。myscript.shbob 中を見てみましょうmyscript.sh: USER=$(whoami) # Do something that takes into account the username. プロセスを生成したユーザーの名前を知るにはどうすればよいですか?より具体的にはwhoami、取得する代わりに取得する代わりに何を使用する必要がbobありrootますか?

4
シェルスクリプトを実行するときに、rootとしてログインするようユーザーに要求する
私が得ている問題は、コマンドを入力すると、 su - root シェルスクリプトファイルの先頭で、ユーザーにパスワードを入力するように要求しますが、残りのシェルスクリプトは続行しません。次に、ターミナルを介してシェルスクリプトを手動で見つけて実行する必要があります。ユーザーがrootとしてログインすることを確認してから、残りのシェルスクリプトを続行するスクリプトが必要です。 つまり、スクリプトを任意のユーザーとして実行したいのですが、スクリプトの実行が開始されたらすぐに、ユーザーはrootに変更し、それが完了するまでスクリプトの残りをrootとして続行する必要があります。これはできますか?

2
引数 '-v'および '-x'はbashを意味しますか?
私は、次のシバンでいくつかのシェルスクリプトを見ました。 #!/bin/bash -x -v しかし、man bashどのようなこれらの引数を説明していない-xと-v、彼らが所属している場合は、静置bashすべてで。 それで、それら-xと-v(および他の可能な引数)はどういう意味ですか?
17 bash  shebang 

2
バックティックを$()に置き換えても機能しません
更新しようとする古いスクリプトがいくつかあります。一部のコードは次のように要約されます。 export X=`(echo "abc"; echo "def")` echo $X これにより、期待される出力が得られます。 abc def 今、インターネットは、私が$()使用する必要があるのはバックティックが出ていることを教えてくれますが、私が試みるとき: export X=$((echo "abc"; echo "def")) X 設定されておらず、エラーが表示されます: bash: echo "abc"; echo "def": syntax error: invalid arithmetic operator (error token is ""abc"; echo "def"") 何が間違っていますか?
17 bash 

2
引数として指定されたファイルからデータを読み取ることを期待するプログラムにデータをストリーミングするにはどうすればよいですか?
gzipで圧縮された巨大なファイルがあり、プログラム(この場合は4s-import)で読み取りたい。最初にファイルを解凍し、次にファイルへのパスを引数としてプログラムを呼び出すには、多くの時間がかかります。次のようなことをすることは可能でしょうか? zcat huge.gz | 4s-import <SOME MAGIC> SOME-MAGICは、stdinを含む抽象ファイルへのパスのようなものですか? 私がしなければならない非常に遅くてディスクスペースを消費する代替手段は次のとおりです: zcat huge.gz > huger 4s-import huger

5
編集のために番号付き履歴コマンドを呼び出すにはどうすればよいですか?
頻繁に変更を検索します history | grep 'string' 履歴のコマンドのリストと履歴行番号を取得します)、たとえば history | grep 'git' 755 git status 1535 git push origin master 1570 git merge origin/one-146 1667 git reset --hard origin/master 次のように、コマンドを一度で呼び出して実行できます!nnn。 !755 git status # On branch master nothing to commit, working directory clean 私の質問は次のとおりです:番号付き履歴コマンドを呼び出して、編集のためにコマンドラインにとどまり、すぐに実行しないで、そのまま実行する方法は!ありますか?

3
小なり記号がbashのcatの代わりとして機能しないのはなぜですか?
「猫の無駄な使用」について聞いたところ、いくつかの提案が見つかりましたが、次の例ではbashシェルに何も出力されません。 < filename ただし、catを使用しても正常に機能します。 cat filename Fedora Core 18とGNU bashバージョン4.2.45(1)を使用しています。 編集:パイプの前でそれを使用しても動作しません。 < filename | grep pattern 一方、catを使用しても期待どおりに機能します。 cat filename | grep pattern EDIT2:明確にするために、私はこれを使用できることを知っています grep pattern < filename しかし、ここで/programming/11710552/useless-use-of-catを読み、コマンドの前で使用することもできます。ただし、コマンドの前では機能しません。

3
rsyncでファイルを移動してディレクトリを削除しますか?
最近、大量のファイル(100万を超える)を削除する必要がありました。 rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source それを行うための最も最適化された方法の1つであり、それよりも高速であることを保証できrm -rfます。 私はこの問題の専門家ではありませんが、rsyncのパフォーマンスの理由は、ファイルをリストする方法(FIFOではなくLIFOの場合)に何らかの理由があります。問題は、大量のファイルを効率的な方法で移動する必要があることです。少し検索した後、私はこれを見つけました: rsync -av --ignore-existing --remove-source-files ~/source ~/destination これにより、に移動したすべてのファイルが削除されますが~/source、ディレクトリはそのまま残ります。「ラウンドロビン」のようなディレクトリ構造を持っているため、の数はfiles/directories1に非常に近いため、ディレクトリを完全に削除するには、最初のコマンドを再度実行する必要があります。 rsync -av --ignore-existing --remove-source-files ~/source ~/destination && \ rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source ストレートmvはほぼ瞬時に終了し~/destinationますが、私のディレクトリには保持する必要があるファイルがあるためmv、オプションではありません。--prune-empty-dirsおよび--forcersyncオプションを見つけましたが、どちらも期待どおりに動作しないようです: --force force deletion of directories even if not empty --prune-empty-dirs prune empty …

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