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

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


5
普遍的な非bashの「時間」ベンチマークの代替?[閉まっている]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 3年前休業。 異なるシェル間でスクリプトの実行時間を比較するために、一部のSEの回答は、次のようにbashの組み込み timeコマンドの使用を提案しています。 time bash -c 'foo.sh' time dash -c 'foo.sh' ... など、すべてのシェルをテストします。このようなベンチマークでは、各シェルがそれ自体をロードして初期化するのにかかる時間を排除できません。例えば、上記のコマンドの両方が上に格納されたと仮定初期フロッピーディスクの読み出し速度と遅いデバイス、(124キロバイト/秒)、 dash(〜150K実行)についてロードする7Xより速くbash(〜1M)、シェル読み込み時間はtime数値を歪めます-これらのシェルの事前読み込み時間は、シェルが読み込まれた後のfoo.sh各シェルの下の実行時間の測定には関係ありません。 各シェル内から実行できるスクリプトタイミング用に実行するのに最適なポータブルで一般的なユーティリティは何ですか?したがって、上記のコードは次のようになります。 bash -c 'general_timer_util foo.sh' dash -c 'general_timer_util foo.sh' 注意:移植性や汎用性がないため、シェル組み込み timeコマンドはありません。 さらに、utilがシェルの内部コマンドとパイプラインにかかる時間をベンチマークでき、ユーザーが最初にそれらをスクリプトにラップする必要がない場合はさらに良いでしょう。このような人工的な構文は役に立ちます: general_timer_util "while read x ; do echo x ; done < foo" 一部のシェルtimeはこれを管理できます。たとえばbash -c "time while false ; do : ; done"動作します。システムで何が機能するか(そして機能しないか)を確認するには、次のことを試してください。 …

1
500日以上経過したファイルを削除する
2010年からのファイルを含むディレクトリがあります。500日より古いすべてのファイルを削除したいのですが、これを試しました。 find /var/log/arc/* -type f -mtime +500 -delete {}\; しかし、私はこれを得ます: -bash: /usr/bin/find: Argument list too long 私が知っているように、これはファイルが多すぎてfindそれらを処理できないことを意味します。しかし、+20003年以上経過している場合でも、これを取得しています。 ここで何が欠けていますか?

3
Bashブレース展開で変数を使用できますか?
以下は、私が達成しようとしていることに対するある種の疑似コードです: #!/bin/bash # I already have the variable below figured out (positive integer): numlines=$([returns number of lines containing specific characters in a file]) # This is basically what I want to do with it: for i in {1..$numlines}; do # the part below is already figured out as well: do …

4
bashスクリプト内でchown $ USER:$ USERを使用する
私が実行している小さなbashスクリプトで、作成された新しいディレクトリを変更しようとしています。私は追加しました: sudo chown $USER:$USER /var/www/$sitename sudo chmod 775 /var/www/$sitename mkdir(sudo mkdir /var/www/$sitename)の行の後。 何らかの理由で、chownが実行されていません。手動で実行できますが、ファイルに書き込んでも動作しません。「chown」が「mkdir」および「chmod」と同じ色で強調表示されていないことに気付きましたが、問題を理解できません。 ここでchownが機能しないのはなぜですか? それは問題$USER:$USERですか? 編集これ が完全なスクリプトです。root以外のユーザーがスクリプトを実行した場合、どのようにファイルを変更しますか? #!/bin/sh #!/bin/bash # New Site cd /etc/apache2/sites-available/ echo "New site name (test.my):" read sitename echo "<VirtualHost *:80> ServerAdmin admin@$sitename ServerName $sitename ServerAlias $sitename DocumentRoot /var/www/$sitename <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory …

3
シェルスクリプトを一時停止するには任意のキーを押し、再開するにはもう一度押します
ファイルをコピーし、ファイルごとにその進行状況をエコーするAPIをテストするためのシェルスクリプトを作成しました。 各コピーの間には2秒間のスリープがあるため、任意のキーを押してスクリプトを一時停止し、より詳細なテストを行う機能を追加したいと思います。次に、任意のキーを押して再開します。 これをできるだけ少ない行に追加するにはどうすればよいですか?

6
bashで末尾の改行を削除するにはどうすればよいですか?
Perlのように動作するものを探していchompます。私は単に入力を表示するコマンドを探しています。それが改行の場合は最後の文字を差し引いたものです。 $ printf "one\ntwo\n" | COMMAND_IM_LOOKING_FOR ; echo " done" one two done $ printf "one\ntwo" | COMMAND_IM_LOOKING_FOR ; echo " done" one two done (BashとZshでコマンドを置換すると、末尾の改行がすべて削除されますが、末尾の改行を最大1つ削除するものを探しています。)

2
リモートマシンでスクリプトを実行すると、ファイル名に疑問符が含まれるのはなぜですか?
現在の日付をフェッチし、PHPスクリプトを実行して、出力(およびエラー)を現在の日付を含むファイル名にリダイレクトする小さなスクリプトがあります。 DATE=$(date +"%Y%m%d") FILE="log/${DATE}.log" php -q script.php >> $FILE 2>&1 このスクリプトをローカルマシン(Windows 7、Aptana IDE)で実行すると、PHPスクリプトは正常に動作し、ログファイルには予期されたファイル名(例:)が含まれます20140502.log。 しかし、そのスクリプトをSFTP経由でリモートマシンにプッシュしてそのスクリプトを実行すると、ファイル名は次のようになります。 20140502?.log? 何が問題でしょうか?これはencondingエラーですか(たとえば、SFTPアップロードのエンコーディングはANSIIであり、UTF-8が期待されます)?または、スクリプト自体で何かを変更する必要がありますか? システム/シェルに関する情報: [foo@bar path]$ sh --version GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) 面白い事実:そのスクリプトがcronjobによって呼び出された場合、疑問符は発生しません。スクリプトを手動で実行した場合のみ。

3
Bashスクリプト。処理速度の最適化
Bashスクリプトを最適化するための一般的なガイドラインがあるかどうか疑問に思っていました。 たとえば、コマンド行よりもループを記述する方が便利ですが、システムの処理も高速ですか?例: for i in a b c; do echo $i; done echo a echo b echo c 時々人々は同じ問題に対して異なる解決策を提示します。たとえば、sed、cut、awk、およびechoすべての文字列から数字を削除することができます。数字のコードが少ないほど、使用すると速くなると言えるのではないかと思いました。 同じコマンド、例えば STRING=abc.def echo ${STRING} | sed 's/.def//g' echo ${STRING} | sed '$s/....$//' 異なるコマンド、例えば STRING=abc.def echo ${STRING} | cut -d . -f 1 echo ${STRING} | sed 's/.def//g'

4
Linuxでユーザーに初期/デフォルトパスワードを割り当てるにはどうすればよいですか?
ユーザーのパスワードの設定方法を説明したガイドを見つけました。私はそれを自動化して、次のようなユーザーに電子メールを送信しようとしています: userid created with password XYZ. request to change the initial password. 上記のドキュメントによると、Pythonを使用して暗号化されたパスワードを作成し、usermod次のようにコマンドに渡す必要があります。 usermod -p "<encrypted-password>" <username> これを行う他の簡単な方法はありますか?それを行うために特別なユーティリティをダウンロードしたくありません。可能な限り一般化する必要があります。 編集:上記のリンクで与えられた方法でさえ私にはうまくいかないようです: bash-3.00# python Python 2.4.6 (#1, Dec 13 2009, 23:43:51) [C] on sunos5 Type "help", "copyright", "credits" or "license" for more information. >>> import crypt; print crypt.crypt("<password>","<salt>") <sOMrcxm7pCPI >>> ^D bash-3.00# useradd …

4
bashスクリプトでの論理AND
私が持っているif2つのファイルのいずれかが存在する場合、彼らはそれが試合をエコーすべき存在しない場合は、チェックする必要が私のbashスクリプトで。 私が持っているコード: if [[ ! -f /etc/benchmarking/code ]] && [[ ! -f /etc/benchmarking/code.class ]]; then echo "match" fi しかし、これは何らかの理由で機能しないようです。 これら2つのファイルが存在しないことを110%確信しています。エラーは発生しませんが、に入りませんif。 私はbashスクリプトを初めて使用するので、何が問題なのかわかりません。

5
シェルスクリプトのプロファイルを作成するにはどうすればよいですか?
シェルスクリプトで実行しているプログラムがいくつかあります。 ./myprogram1 ./myprogram2 ... ソースコードを編集して個々のプログラムをプロファイリングできることはわかっていますが、スクリプト自体をプロファイリングすることによって実行された合計時間を測定できる方法があるかどうかを知りたいと思いました。この目的に使用できるタイマープログラムはありますか?もしそうなら、その測定はどのくらい正確ですか?

2
`select`コマンドを使用してBashでメニューを印刷する
selectコマンドを使用して簡単なメニューを実装しようとしています。スクリプト(テスト用)は次のとおりです。 #!/bin/bash echo "*******************" PS3='Select an option and press Enter: ' options=("apache" "named" "sendmail") select opt in "${options[@]}" do case $opt in "apache") date ;; "named") echo "test" ;; "sendmail") echo "test 2" ;; *) echo "invalid option";; esac done echo "*********************" スクリプトは私が与える有効な入力を認識せず、常に「無効なオプション」メッセージを出力します。このスクリプトの何が問題になっていますか?

3
Systemd Unitファイルにパスワードを渡す一般的な方法はありますか?
systemdユニットファイルを使用してサービスを開始したいと思います。このサービスを開始するにはパスワードが必要です。パスワードは平文でsystemdユニットファイルに保存したくないのです。また、このパスワードをインタラクティブに提供したくありません。 このための通常のスクリプトを作成している場合は、制限付きのアクセス許可(400または600)でrootが所有するファイルに資格情報を保存し、スクリプトの一部としてファイルを読み取ります。これを行う特定のsystemdスタイルの方法はありますか、それとも通常のシェルスクリプトと同じプロセスに従うだけですか?

4
PIPEで使用されるBash終了ステータス
パイプが使用されているときに終了ステータスがどのように伝えられるかを理解しようとしています。私がwhich存在しないプログラムを見つけるために使用しているとしましょう: which lss echo $? 1 which見つからなかったのでlss、終了ステータス1を取得しました。これで問題ありません。しかし、私が次のことを試みると: which lss | echo $? 0 これは、最後に実行されたコマンドが正常に終了したことを示しています。私がこれを理解できる唯一の方法は、おそらくPIPEも終了ステータスを生成することです。これを理解する正しい方法はありますか?
10 bash  shell-script  pipe  exit 

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