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

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

3
文字列のn番目の文字の大文字と小文字を変更する
私は、文字列中のn番目の文字の大文字と小文字を変更するBASH(例えば、または任意の他の* nixのツールsed、awk、tr、など)。 文字列全体の大文字と小文字を次のように変更できることを知っています。 ${str,,} # to lowercase ${str^^} # to uppercase 「テスト」の3文字目の大文字を大文字に変更できますか? $ export str="Test" $ echo ${str^^:3} TeSt


3
ファイル内のヌル区切りのアイテムを数える
find -print0処理するファイルのリストを一時ファイルに保存するために使用するシェルスクリプトがあります。ロギングの一部として、見つかったファイルの数を出力したいので、その数を取得する方法が必要です。-print0オプションが安全のために使用されていなかった場合、私wc -lはカウントを取得するために使用できます。

3
コマンドのグループをパイプする/リダイレクトする
現在、次の設定を使用して複数のコマンドの出力をリダイレクトしています。 echo "Some normal commands" ( echo "Error: something happened" echo "Warning: this incident will be logged" ) >> logfile echo "More normal commands" これはかなり便利で、パイプでも機能します。 これはこれを行う最良の方法ですか?考慮すべき代替案はありますか?

1
inotifywait-名前を変更するときに古いファイル名と新しいファイル名を取得する
ファイルの名前変更を検出し、古いファイル名と新しいファイル名の両方を取得する信頼できる方法を探しています。これは私がこれまでに持っているものです: COUNTER=0; inotifywait -m --format '%f' -e moved_from,moved_to ./ | while read FILE do if [ $COUNTER -eq 0 ]; then FROM=$FILE; COUNTER=1; else TO=$FILE; COUNTER=0; echo "sed -i 's/\/$FROM)/\/$TO)/g' /home/a/b/c/post/*.md" sed -i 's/\/'$FROM')/\/'$TO')/g' /home/a/b/c/post/*.md fi done 動作しますが、監視フォルダーにファイルを移動したり、監視フォルダーからファイルを移動したりしないことを前提としています。また、イベントは、最初にmoved_from、次にmoved_toのペアで発生すると想定しています。これが常に正しいかどうかはわかりません(これまでのところ機能します)。 私はinotifyがcookieを使用してイベントをリンクすることを読みました。クッキーはどういうわけかアクセス可能ですか?クッキーがないので、タイムスタンプを使用してイベントをリンクすることを考えました。FROMとTOをより信頼できる方法で取得するためのヒントはありますか? 完全なスクリプトの要点。

3
bashシェルスクリプトからサービスURLを並行して呼び出す方法は?
別のアプリケーションから呼び出しているサービスがあります。以下は私が呼び出している私のサービスURLです- http://www.betaservice.domain.host.com/web/hasChanged?ver=0 上記のサービスURLを1つずつ順番に呼び出すのではなく、マルチスレッドで負荷テストを行う必要があります。 bashシェルスクリプトからの方法はありますか?マルチスレッドで呼び出すことにより、上記のサービスURLに負荷をかけることができますか?可能であれば、URLを超えて60〜70のスレッドを並行して非常に高速に呼び出すことができますか?

1
シェルスクリプトを配布する適切な方法
シェルの動作が変更可能でset予測できない場合、シェルスクリプトを配布する最も適切な方法は何ですか? たとえば、rm *.txt実行された環境では期待どおりに実行されませんset -f。がどのrm *.txt環境でも現在のディレクトリにあるすべてのテキストファイルを削除することを確認するにはどうすればよいですか? 一般的に配布する前に、シェルスクリプトが期待どおりに実行されることを確認するにはどうすればよいですか?

2
プログラムを実行し、クラッシュせずに終了した場合に再度実行するBashスクリプトを作成する
MacOSXでアプリを実行するbashスクリプトを作成する最も簡単な方法を知りたいです(これはUNIXベースのシステムなので、これが正しい場所だと思いました)。プログラムが終了するのを待ちます。出口がクラッシュではなかった場合は、もう一度実行します。それ以外の場合は、クラッシュレポートウィンドウを開いたままにして終了します。 このスクリプトは、クラッシュまたは手動で終了するまで永遠に実行させてください。 私は漠然とした考えを持っていますが、よくわかりません。ここに私がこれまで持っているものがあります: echo "Launching Autorun…" if ["$1" -eq "0"]; then # Application exited successfully. Restarting. /path/to/application.app else # An error occured. Do nothing and exit. exit fi

2
Bashスクリプトのアクセス許可が拒否されました&悪い通訳
私はkali linux 64ビットを使用しています。 2つの引数を使用して開始するPythonスクリプトを作成しました。まったく同じパスを入力するたびに入力したり、ターミナルで使用したコマンドの履歴を検索したりしたくありません。そこで、引数を指定してPythonスクリプトを呼び出す簡単なスクリプトを作成することにしました。 #! /bin bash python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/ これは、ターミナルで使用するコマンドとまったく同じです。しかし、スクリプトファイルを実行しようとすると、エラーメッセージが表示されます。 bash: ./wtf.sh: /bin: bad interpreter: Permission denied wtf.shには実行権限があります。 なにが問題ですか?

1
リモートマシンで変数を使用してsshおよびシェルスクリプトでコマンドを実行する
リモートマシンにあるコマンドとスクリプトをローカルマシンのスクリプトで実行したいのですが。私はでこれらの種類のコマンドを実行することが可能であることを知っているsshので、私は作りました: #!/bin/bash ssh username@target 'cd locationOf/theScript/; ./myScript.sh' それは完全に動作します。変数を使用して、このスクリプトをより汎用的にしたいと思います。さて、それは: #!/bin/bash LOCATION=locationOf/theScript/ EXEC=myScript.sh ssh username@target 'cd ${LOCATION}; ./${EXEC}' そして私はこのエラーを受け取ります: bash: ./: is a directory リモートマシンはこれらの変数を認識していないと思います。それらをターゲットにエクスポートする方法はありますか?

2
シェルスクリプトの用語における拡張と置換の違い
拡張と置換は、シェルプログラミング言語の同じコンテキストで互換性があるようです。たとえば、Bashリファレンスマニュアル、Bash Hackers Wikiなどの一部のドキュメントでは、「シェルパラメータ拡張」を説明するために「拡張」という単語を使用しています。しかし、他のいくつかの文書は「置換」という言葉を好むようです。Advanced Bash-Scripting Guideは、パラメータ置換を使用しています。 シェルプログラミング用語に関して、「拡張」と「置換」の間に違いはありますか?


1
HDMIが接続されている、または接続されていないときにディスプレイを構成するbashスクリプトを作成する方法
Kubuntu Precise(12.04)を実行しているノートブックを持っています。このノートブックを時々ビデオを見るために使用しています。その際、HDMIモニターが接続されたA / Vレシーバーに接続されたHDMIケーブルを差し込みます。 この方法でビデオを見る場合でも、システムを操作して再生を制御するときなどは、ノートブックのディスプレイを使用する必要があります。HDMIモニターのテキストは、座っているところから読むのが難しいです。 HDMIケーブルを差し込むと、Kubuntuがそれを検出しますが、奇妙なダンスシーケンス(機能しますが、複雑です)を実行して、ビデオとオーディオの両方について正しくセットアップする必要があります。これを修正するために、私はbashスクリプトをxrandr最初から正しく記述できるようにしています。 このU&L Q&AというタイトルのPeoroの答えから基本的なアイデアを得ました。外部ディスプレイが接続されているときにRandR構成を自動的に適用するツールです。 私のスクリプトについて 私のスクリプト(以下に含まれています)は機能しますが、改善が必要です。 HDMIモニターのビデオモードは正しく設定されますが、LVDS1モニター(ノートブック上)はデスクトップの左上部分のみを表示するように変更されます。これは、右側のウィンドウスクロールバーとオンのタスクバーが切り取られるため問題です。ボトム。 私はこれを--scaleで修正しようとしましたが、最初の試みは物事を台無しにしてしまい、正常に機能するディスプレイに戻すには再起動する必要がありました。 両方のディスプレイに同じコンテンツを表示させる方法はありますが、それぞれが独自の優先解像度を使用していますか? または、少なくとも、HDMIディスプレイの使用中にデスクトップ全体にアクセスできるようにノートブックディスプレイを設定する方法はありますか? スクリプトをデバッグしているので、まだクリーンアップされていません。後でもっとやりたいかもしれません。 私のスクリプト #!/bin/bash ## hdmi_set ## Copyleft 11/13/2013 JPmicrosystems ## Adapted from ## /unix/4489/a-tool-for-automatically-applying-randr-configuration-when-external-display-is-p ## Answer by peoro # setting up new mode for my VGA ##xrandr --newmode "1920x1080" 148.5 1920 2008 2052 2200 1080 1089 …

1
これは、「find…-exec sh -c '…' sh {} +」を使用してコマンドをどのように機能させるのですか?
@StephaneChazelasがこのQ&Aに次の解決策を投稿しました:「find -exec {} +」の使用に問題があります。 $ find . -iname "*.extension" -exec sh -c ' exec <command> "$@" <additional parameters>' sh {} + ここで何が起こっているのですか?具体的には、最後sh {}は何をしますか?それは、-exec何かすることがあるように、NOOPであるように、findのコマンドを鎮静化するためだけにあるかのようです。 私はecho {}そこに簡単に置くことができ、それはうまく機能しているようです。

3
特定の日ではなく他のすべての日に実行するCron
私は毎日午後10時にbashスクリプトを実行するようにcronを設定しています。毎月1日に実行する別のcronセットアップがあります。両方のcronはbashスクリプトを起動します。bashスクリプトの唯一の違いは、それらが基礎となるJavaプログラムに渡す引数です(Javaプログラムのコマンドライン起動をエミュレートします)。 問題は、どちらかが同じ日に実行されないように、月の1日目に毎日cronを無効にする必要があることです。これは自動的に実行できますか? 別のbashスクリプトを作成して、最初の前にcronを編集し、その後に再度設定することができると思いますが、これは...不明瞭なようです。

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