タグ付けされた質問 「shell-script」

シェルスクリプト、シェルによって解釈される実行可能ファイル(bash、zshなど)に関する質問。

7
サービスがスクリプトで実行されているかどうかをテストする「適切な」方法
私の問題: 私はbashスクリプトを書いていますが、その中で特定のサービスが実行されているかどうかを確認したいと思います。 私はこれを手動で行う方法を知っています$ service [service_name] status。 しかし、(特にsystemdへの移行以来)解析するのが少し面倒なテキスト全体を印刷します。単純な出力または確認できる戻り値を持つスクリプト用に作成されたコマンドがあると想定しました。 しかし、グーグルで動き回っても「ああ、ただps aux | grep -v grep | grep [service_name]」という結果しか得られません。それはベストプラクティスとは言えませんね。そのコマンドの別のインスタンスが実行されていて、SysV initスクリプトによって開始されたものではない場合はどうなりますか? それとも、黙って小さなpgrepで手を汚すべきですか?

2
括弧は本当にコマンドをサブシェルに入れますか?
私が読んだことから、コマンドを括弧で囲むと、スクリプトを実行するのと同様に、サブシェルで実行されるはずです。これが当てはまる場合、xがエクスポートされていない場合、変数xはどのように見えますか? x=1 (echo $x)コマンドラインで実行すると1になります echo $x期待どおり、スクリプトで実行しても何も起こりません

6
シェルコマンドを使用してasciiファイルの最初のn行を削除するにはどうすればよいですか?
最初の5〜10行にASCIIテキスト情報を含む複数のファイルがあり、その後に適切に表にされたマトリックス情報が続きます。シェルスクリプトでは、これらの最初の数行のテキストを削除して、純粋なマトリックス情報を別のプログラムで使用できるようにします。これを行うにはbashシェルコマンドをどのように使用できますか? 助けがあれば、RedHatとUbuntu Linuxシステムを使用しています。

4
複数行のシェルスクリプトコメント-これはどのように機能しますか?
最近、私はこれまで見たことのない複数行のコメントタイプにつまずきました。スクリプトの例を次に示します。 echo a # : aaa : ddd # echo b これは機能しているように見えvimますが、構文を強調することさえできます。このコメントのスタイルは何と呼ばれ、それに関する詳細情報を見つけるにはどうすればよいですか?

18
シェルを使用してinitシステムを検出する
これは、オペレーティングシステムの検出に関連している可能性がありますが、特にシステムで現在使用されているinitシステムが必要です。 Fedora 15とUbuntuはsystemdを使用するようになり、UbuntuはUpstart(15.04までの長いデフォルト)を使用していましたが、他のものはSystem Vのバリエーションを使用しています。 クロスプラットフォームデーモンになるために書いているアプリケーションがあります。初期化スクリプトは、configureで渡すことができるパラメーターに基づいて動的に生成されています。 私がやりたいのは、彼らが使用している特定のinitシステム用のスクリプトを生成することです。これにより、インストールスクリプトをrootとしてパラメーターなしで合理的に実行でき、デーモンを自動的に「インストール」できます。 これは私が思いついたものです: / binでsystemd、upstartなどを検索します / proc / 1 / commをsystemd、upstartなどと比較します ユーザーに尋ねる これを行う最良のクロス/プラットフォーム方法は何でしょうか? 関連の種類、大部分の* nixにbashを依存させることはできますか、それともディストリビューション/ OSに依存しますか? 対象プラットフォーム: マックOS Linux(すべてのディストリビューション) BSD(すべてのバージョン) Solaris、Minix、およびその他の* nix

13
シェルで2つの日付を比較する方法は?
シェルで2つの日付をどのように比較できますか? そのままでは機能しませんが、これをどのように使用したいかの例を次に示します。 todate=2013-07-18 cond=2013-07-15 if [ $todate -ge $cond ]; then break fi 望ましい結果を得るにはどうすればよいですか?


3
Git作業ディレクトリがスクリプトからクリーンであるかどうかを判断する
rsyncGit作業ディレクトリを宛先として実行するスクリプトがあります。作業ディレクトリがクリーン(コミットする変更なし)かどうかによって、スクリプトに異なる動作をさせたい。たとえば、の出力がgit status以下の場合、スクリプトを終了します。 git status Already up-to-date. # On branch master nothing to commit (working directory clean) Everything up-to-date ディレクトリがクリーンでない場合は、さらにいくつかのコマンドを実行したいと思います。 上記のような出力をシェルスクリプトで確認するにはどうすればよいですか?
83 shell-script  git 

9
エレガントな方法で永遠に何もしない方法は?
に役立つ情報を生成するプログラムstdoutがありますが、からも読み取りますstdin。標準入力に何も提供せずに、標準出力をファイルにリダイレクトしたい。これまでのところ、とても良い:できること: program > output ttyでは何もしません。 ただし、問題はこれをバックグラウンドで実行することです。私が行った場合: program > output & プログラムは中断されます(「中断(tty入力)」)。 私が行った場合: program < /dev/null > output & EOFに達するため、プログラムはすぐに終了します。 私が必要なのはprogram、無期限に何もせず、読まない何かにパイプすることstdinです。次のアプローチが機能します。 while true; do sleep 100; done | program > output & mkfifo fifo && cat fifo | program > output & tail -f /dev/null | program > output & しかし、これは非常にいものです。そこ持ち(言い換えために「無期限に、何もしない」ために、標準のUnixユーティリティを使用して、エレガントな方法であることをman …

3
スクリプトに$“ dollarsign-prefixed string”があるとはどういう意味ですか?
私はこれを初期化スクリプトで見ました: echo $"Stopping Apache" そのドル記号は何のためですか? これまでの私の研究: 私はこれをbashマニュアルで見つけました: 引用 場合は設定、$'string'および$"string"引用は内で行われ${parameter}、二重引用符で囲まれた展開。このオプションはデフォルトで有効になっています。 ...しかし、$接頭辞のある文字列とない文字列の違いは見つかりません: $ echo "I am in $PWD" I am in /var/shared/home/southworth/qed $ echo $"I am in $PWD" I am in /var/shared/home/southworth/qed $ echo $"I am in ${PWD}" I am in /var/shared/home/southworth/qed $ echo "I am in ${PWD}" I am in /var/shared/home/southworth/qed …

2
パターンはなぜ「コマンド|| 本当」有用ですか?
現在、Debianパッケージを調査しており、コードサンプルをいくつか読んでいます。また、たとえば、postinstスクリプトはすべての行でパターンです。 some command || true another command || true したがって、一部のコマンドが失敗すると、行はtrueを返しますが、これがプログラムの出力にどのように影響するかわかりません。

5
パッケージがbashスクリプトのyumを介してインストールされているかどうかを確認するにはどうすればよいですか?
パッケージをインストールするスクリプトを作成しようとしていますが、後で失敗すると、スクリプトはインストールされたものをロールバックします。もちろん、ユーザーが以前にパッケージを既にインストールしている場合、それらの下からアンインストールしたくありません。パッケージがyumを介して以前にインストールされたかどうかをスクリプトで確認するにはどうすればよいですか?


7
シェルの深さはいくつですか?
問題:シェルの深さを確認してください。 詳細:vimからシェルをたくさん開きます。ビルドして実行し、終了します。時々忘れて、別のvimを開いてから、さらに別のシェルを開きます。:( シェルの深さがいくつあるかを知りたいのですが、シェル画面に常に表示されているかもしれません。(その部分を管理できます)。 私の解決策:プロセスツリーを解析し、vimとbash / zshを探して、現在のプロセスの深さを調べます。 そのようなものはすでに存在しますか?何も見つかりませんでした。
73 bash  shell-script  shell  vim  zsh 

4
OS Xのmktempの修正または代替
私は誰かが書いたbashスクリプトを見ていますmktemp: TEMP=`mktemp --directory` ただし、この行は私のマシンでは動作しません(OS X 10.6)。 この行を修正して、un-x * -like-platform互換になるようにしますか?編集:代替コマンドでも十分でしょう。

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