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

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

3
`ls -s`が「0」を出力するのはいつですか
もちろん、ファイルが空かどうかをテストする標準的な方法はですがtest -s FILE、クライアントの1人が次のようなテストを含むスクリプトを受け取りました。 RETVAL=`ls -s ./log/cr_trig.log | awk '{print $1}'` if test $RETVAL -ne 0 then echo "Badness: Log not empty" exit 25 fi サプライヤからは、テストした2つの環境で動作するという主張がありました。言うまでもなく、テストした2つの場所の両方でひどく失敗しました。 それで、私は興味を持ちました。ない場合はls -s、印刷0空のファイルのため? これはこれまでの私の発見です: Linux上のGFS:4 Linux上のext4:0 Solaris上のZFS:1 SolarisのUFS:0 AIX上のjfs:0 HP-UX上のVxFS:0 HP-UX上のHFS:0 Mac OS X上のHFS:0 ネットワーク化されたファイルシステムについてはまだ調べていません。 質問:スクリプトが間違っていることを他の人にエレガントに説明するにはどうすればよいですか? 私の意見では、「正しい」バージョンは次のようになります。 if test ! -s ./log/cr_trig.log then echo "Badness: Log …

2
ルート対応スクリプトに変数を安全に渡す方法は?
この質問は完全に一般的なものであり、私の状況にのみ適用されるわけではありません。たとえば、DHCPを有効にする次の小さなスクリプトのよう$1に、コマンドライン(!!)で送信する変数()は、送信するホスト名のみです。 #!/bin/bash udhcpc -b -i eth0 -h $1 このようにudhcpcを実行するにはルートアクセスが必要なので、これを行う/etc/sudoersには、次の行を含むように変更する予定です。 joe ALL = NOPASSWD: /path/to/enable_dhcp.sh 次のコマンドを実行するだけで、「joe」がそのスクリプトをルート権限で簡単に実行できるようになります sudo /path/to/enable_dhcp.sh パスワードを求められない(これは、joeがこれをスクリプト化できるようにするためです)。 今..私は、ルート権限で簡単に実行できるスクリプトで使用することは、あなたが望むものを何でも注入できるので、恐ろしいアイデアであることを知っています(または少なくとも私はそう思います)$1。 だから...これに対処する最良の方法は何ですか?インジェクション攻撃に対して広く開かれていないときに、root権限でjoeに必要なことをさせ、変数を渡す(または環境変数を使用して効果的に行う)ようにするにはどうすればよいですか?

1
.bashrcと.inputrcの違いは何ですか
私は、UNIXシステムに新しいですし、それが面白いように設定ファイルでカスタマイズ機能や構成を作成するために見つける.bashrcと.inputrc。 しかし、私はこの2つの違いを理解していません。たとえば、エイリアスを作成したときに、それらをに入れます.bashrc。 Example 1: alias ...='cd ../../' 矢印キーを使用して前または次のコマンドを探すなどの操作を作成するとき、コマンドをに入れ.inputrcます。 Example 2: "\e[A": history-search-backward それらを異なる設定ファイルに入れる必要があるのはなぜですか?いつどこに何を置くかを区別するにはどうすればよいですか? 前もって感謝します!


1
Pythonスクリプトの起動時にVirtualenvをアクティブにする方法は?
特定の日にcronを使用してPythonスクリプトを実行するようにスケジュールしたいのですが、問題はexample.py動作するためにexample-envアクティブ化する必要があるというexample.pyことです、cronを実行するたびに独自のvirtualenv をアクティブにする方法はありますか? そうでない場合、私はbash.sh含むbashスクリプトを作成する必要があります #!/usr/bin/env bash workon example-env python2 example.py そして、特定の日にcronによって実行されるようにスケジュールしますか?または、私は何か他のことをしなければなりませんか? どちらの方法でも問題ありません。正しい方法を知りたいだけです。おそらく、実行するPythonファイルが多数あるため、bashスクリプトメソッドを好むので、それらをすべてbashスクリプト内に入れてスケジュールすると、私にとっては簡単に思えますが、正しい方法はわかりません。 、したがって、私はアドバイスを求めています。

3
ヘッド/テールへの負の引数
この質問の変種は確かにさまざまな場所で何度か尋ねられていますが、私はM運のないファイルから最後の行を削除しようとしています。 二番目に投票の回答で、この質問は、ファイルの最後の行を取り除くために、次のことをお勧めします: head -n -1 foo.txt > temp.txt ただし、OSXとZshでそれを試すと、次のようになります。 head: illegal line count -- -1 何故ですか?どのように私は削除することができM 、最後の行と最初の N与えられたファイルの行を?

1
子プロセスのPGIDが親のPIDではないのはなぜですか?
だから私はこのコマンドが親プロセスのすべての子プロセスを終了することをどこでも読み続けます: kill -- -$$ killコマンドでネガティブIDを使用するとPGIDが参照され、私が見た例では、子プロセスのPGIDは親のPIDであるはずですが、システムではそうではありません。 私のシステムでは、子のPGIDは親スクリプトのPGIDと同じであり、bashであることがわかりました。 何が起きてる?例は間違っていましたか、または私のシステムは異なって設定されていますか? 私が達成する必要があるのは、親が終了することなく子プロセスを終了することです。そのため、親がいるPGIDにkillシグナルを送信したくありません。

2
複数のプロセス間の通信
私はmanager()関数をx回の個別のプロセスとして実行するbashスクリプトを持っています。スクリプト内からすべてのmanager()プロセスにメッセージを転送するにはどうすればよいですか? 匿名パイプについて読んだことがありますが、メッセージを共有する方法がわかりません。名前付きパイプでそれをやろうとしましたが、プロセスごとに個別の名前付きパイプを作成する必要があるようです。 これを行う最もエレガントな方法は何ですか? これまでの私のコードは次のとおりです。 #!/bin/bash manager () { while : do echo "read what has been passed to \$line" done } x=1 while [ $x -le 5 ] do manager x & x=$(( $x + 1 )) done while : do while read line do echo "What has been passed …

5
シェルスクリプトでルート権限を削除するにはどうすればよいですか?
OpenVPNの「--up」オプションは、通常、ルーティングなどに使用されます。したがって、OpenVPNがルート権限を削除して誰としても実行されない前に処理されます。ただし、非特権ユーザーとして実行する必要があるシェルスクリプトを呼び出しています。 それ、どうやったら出来るの?私が研究しているドロッププロセス特権、特に多項式のとtylerlの答えを、私は実装する方法を理解していません。私はCentos 6.5で作業していますが、「chmod u + s」と「setuid()」の両方として、suidがブロックされています。 OpenVPNプラグイン( "openvpn-down-root.so")があります。これにより、 "-down"オプションによって呼び出されたスクリプトをrootとして実行できます。「openvpn-up-user.so」などの同等のものがありますが、見つかりませんでした。 編集0 Nikola Koturの答えに従って、Ian Meyerのrunit-rpmをインストールしました。chpstコマンドは端末で機能しますが、アップスクリプトでは「command not found」で失敗します。動作するのは、「sudo chpst」に加えて、適切な表示と言語の設定です。端末がユニコード文字を正しく出力しないのはなぜですか?をご覧ください。そのため、upスクリプトには次の4行が必要です。 LANG="en_US.UTF-8"; export LANG GDM_LANG="en_US.UTF-8"; export GDM_LANG DISPLAY=:0; export DISPLAY sudo chpst -u user -U user /home/user/unprivileged.sh & 編集1 0xC0000022Lのコメントごとに、「sudo -u user」は「sudo chpst -u user -U user」と同様に機能することがわかりました。 LANG="en_US.UTF-8"; export LANG GDM_LANG="en_US.UTF-8"; export GDM_LANG DISPLAY=:0; export …

2
bash / shellスクリプトの依存関係を確認する
bashスクリプトの依存関係を確認する方法/コマンドはありますか?言い換えれば、この質問に対する回答:スクリプトを実行するためにユーザーがインストールすべきライブラリはどれですか? スクリプトを読んで手動でこれを行うことができ、それが呼び出す他のライブラリ/コマンドを確認できますが、これは長いスクリプトでは明らかではありません。

5
Linux bashスクリプトでエラーをキャッチする方法は?
次のスクリプトを作成しました。 # !/bin/bash # OUTPUT-COLORING red='\e[0;31m' green='\e[0;32m' NC='\e[0m' # No Color # FUNCTIONS # directoryExists - Does the directory exist? function directoryExists { cd $1 if [ $? = 0 ] then echo -e "${green}$1${NC}" else echo -e "${red}$1${NC}" fi } # EXE directoryExists "~/foobar" directoryExists "/www/html/drupal" スクリプトは動作しますが、エコーのほかに、次の場合の出力もあります cd $1 …

9
exprを使用して2つの数値を追加する
現在行っているITの卒業証書のシェルスクリプトを学んでいます。与えられたチュートリアルの1つに示されているように、2つの数字を追加する小さなスクリプトを作成しようとしています。 echo "Enter two numbers" read num1 num2 sum = 'expr $num1 + $num2' echo "The sum is = $sum" ただし、実行許可を与えてスクリプトを実行すると、このエラーが発生します。 sum: =. No such file or directory. sum: expr $num1 + $num2: No such file or directory UbuntuとFedoraの両方でこれを実行しようとしましたが、同じエラーが発生します。誰も私がここで何が欠けているのか教えてもらえますか?

8
ポケットベルのローカルタイムゾーンで日付ヘッダーを表示するようにmuttを構成するにはどうすればよいですか?
ページャーでメッセージを表示すると、ローカルゾーンではなくUTCで日付ヘッダーに時刻が表示されます。インデックスビューには、現地時間が正しく表示されます。画面の下部にあるステータスバーに現地時間を表示する方法を説明するこの古いメーリングリストの投稿を見つけましたが、これでも画面上部のDateヘッダーの時刻を「修正」しません。ページャーにDateヘッダー時間を現地時間に変換する方法はありますか?

7
「1行目:$ ':\ r':コマンドが見つかりません」と表示されるのはなぜですか?
ラップトップ(DOS)でCygwinを使用しました。私は同僚のスクリプトのコレクションと自分のスクリプトを持っています。私はITの専門家ではなく、Unixに精通していません。私は同僚の構文に従い、いくつかの簡単なことを管理できます。 スクリプトは私の古いラップトップでうまく機能しました。ラップトップを交換し、Cygwinをインストールしました。スクリプトを実行すると、スクリプトが機能しません。ここに私が得るエラーメッセージの一例があります: line 1: $':\r': command not found line 5: syntax error near unexpected token `$'\r'' line 5: `fi これが私のスクリプトの上位5行です : iter=1 if [ -f iter.txt ] then rm ./iter.txt fi 誰かがこの問題を回避する方法を説明してくれませんか?

4
順序が指定されていない場合、bashスクリプトのオプションの引数を解析するにはどうすればよいですか?
次のプログラムのbashスクリプトを作成するときに、オプションの引数/フラグを含める方法がわかりません。 プログラムには2つの引数が必要です。 run_program --flag1 <value> --flag2 <value> ただし、いくつかのオプションのフラグがあります。 run_program --flag1 <value> --flag2 <value> --optflag1 <value> --optflag2 <value> --optflag3 <value> --optflag4 <value> --optflag5 <value> ユーザーの引数をとるようにbashスクリプトを実行したいと思います。ユーザーが順番に2つの引数のみを入力した場合、次のようになります。 #!/bin/sh run_program --flag1 $1 --flag2 $2 しかし、オプションの引数のいずれかが含まれている場合はどうなりますか?そうなると思います if [ --optflag1 "$3" ]; then run_program --flag1 $1 --flag2 $2 --optflag1 $3 fi しかし、$ 4が与えられ、$ 3が与えられない場合はどうでしょうか?

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