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

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

7
ディレクトリが空であることを確認する方法
./123たとえば、空のパスの引数を使用してスクリプトを実行すると、/usr/share/linux-headers-3.16.0-34-generic/.tmp_versions(このディレクトリは空です)という要件があります。「ディレクトリが空です」と表示されます 私のコードは: #!/bin/bash dir="$1" if [ $# -ne 1 ] then echo "please pass arguments" exit fi if [ -e $dir ] then printf "minimum file size: %s\n\t%s\n" \ $(du $dir -hab | sort -n -r | tail -1) printf "maximum file size: %s\n\t%s\n" \ $(du $dir -ab | sort …

2
ダブルハイフン(-)で始まるこのシバンはどのように機能しますか?
RosettaCodeページで次のようなシバンを見つけました。 --() { :; }; exec db2 -txf "$0" Db2でも機能し、Postgresでも同様です。しかし、私は全体の行を理解していません。 ダブルダッシュはSQLのコメントであり、その後、ファイル自体をファイルとして渡すいくつかのパラメーターを使用してDb2実行可能ファイルを呼び出します。しかし、括弧、中括弧、コロン、セミコロン、および実際のシバン#を置き換える方法はどうでしょうか。? https://rosettacode.org/wiki/Multiline_shebang#PostgreSQL

2
Linuxシェルスクリプトでxlsxをxlsに変換する
シェルコマンドを使用して「.xlsx」ファイルを「.xls」に変換する必要があります。 私の仕事では、現在xlsx2csvコマンドを使用していますが、要件が変更されたため、すべての「.xlsx」ファイルを「.xls」ファイルに変換してさらに計算する必要があります。 そのために、私の仕事のある人は、「。xlsx」を「.xls」に変換できるコマンドを1つ開発しましたが、それは1つのシートにのみ適用できます。 1つのファイルに複数のシートがあります。 前もって感謝します....

1
シェルスクリプトがシグナル9で殺されたかどうかを知る方法はありますか
殺され続けるbashスクリプト(javaプログラムから呼び出される)があります。私はいつもsignal 15withをキャッチしますtrapが、それから私が疑う他のシグナルが来signal 9ますが、それが本当にあるかどうかについては基本的に盲目signal 9です。 私はあなたができないことを知っているtrap signal 9のでsignal 9、私のシェルスクリプトを殺すかどうかを知ることができる他の方法はありますか?

1
GNUタイムアウトに相当するPOSIXですか?
GNU coreutils timeoutコマンドは、特定のスクリプトの状況に非常に便利で、実行が速い場合はコマンドの出力を使用でき、時間がかかりすぎる場合はスキップできます。 timeoutPOSIXで指定されたユーティリティのみを使用する基本的な動作を概算するにはどうすればよいですか? (私はそれがの組み合わせを含むことができると思っていますwait、sleep、killそして他に何が、おそらく私はより簡単なアプローチを欠けているを知っています。)

2
シェルスクリプトから一時ファイルを安全に作成してアクセスするにはどうすればよいですか?
私は中に固定名前のファイルに出力をリダイレクトすることを読んで/tmp、攻撃者(あるいは不満)であればあるため、セキュリティ上のリスクとなる可能性がありますファイルがあることの通知/tmp/tmpfileformyscript.tmp、彼は私への読み取りアクセス権を持っていなくても(私は私のスクリプトを実行したときに作成されますスクリプト)、たとえば、スクリプトを実行するときにファイルln -s ~wildcard/.bashrc /tmp/tmpfileformyscript.tmpを破棄するシンボリックリンクを作成でき.bashrcます。 だから代わりに私はのようなものを使用することができますfilename="tmpfile.tmp.$RANDOM" ; echo outputtext > "$filename"。 ただし、キャッシュにtmpファイルを使用したい場合があります。その場合、「tmpfile.tmp。*」が何かに一致するかどうかを知りたい場合は/tmp、新しいファイルを作成するのではなく、そのファイルを使用します。残念ながらtest、[ -f filename ]私が知る限り、同等のものはファイルグロビングをサポートしていません。 したがって、私の質問は2つあります。 一時ファイルを安全に作成するにはどうすればよいですか?"predictablename.$RANDOM"受け入れられるプラクティスですか、それともより良い(より安全で簡単な)方法がありますか? 確認することで、ファイルに簡単にアクセスしたり、後でその存在を確認したりするにはどうすればよいpredictablenameですか?

3
シェルコマンドを使用してファイルから列または複数の列を削除するにはどうすればよいですか?
私のファイル、 ARCHIVE B1_NAME B2_NAME B3_NAME ELEMENT INFO_NAM WERT PROCID -------- -------- -------- -------- -------- -------- ---- ------ 15MinAvg AIRSS 33-GIS DMDMGIS1 I MvAvr15m 1123 CP 15MinAvg AIRSS 33-GIS DMDMGIS1 P MvAvr15m 2344 CP 15MinAvg AIRSS 33-GIS DMDMGIS1 Q MvAvr15m 4545 CP 15MinAvg AIRSS 33-GIS DMDMGIS2 I MvAvr15m 6576 CP 15MinAvg …

3
シェルでの日付検証
シェルスクリプトで以下の日付形式を検証したい 2015-Jul-13 私は使用date -d "2015-Jul-13" +"%Y-%b-%d"していますが、そのエラーを与える date: invalid date '2015-Jul-13'

3
コマンドの質問に対する回答を準備する
1つのコマンドのみを実行するシェルスクリプトを作成するとします。ただし、このコマンドの設計は不十分です。コマンドラインオプションはありません。代わりに、いくつかの質問をし、ユーザーの入力を待ちます。 スクリプトでこの入力を準備する方法はありますか?質問は自動的に回答されますか?

9
ファイルの特定のセクションをフィルターまたはパイプする
入力ファイルにはいくつかのセクションがあり、開始タグと終了タグで区切られています。次に例を示します。 line A line B @@inline-code-start line X line Y line Z @@inline-code-end line C line D このファイルに変換を適用して、行X、Y、Zを何らかのコマンド(nlなど)でフィルター処理し、残りの行は変更せずに通過させます。nl(number行)は行をまたいで状態を蓄積するため、行X、Y、Zのそれぞれに適用されるのは静的な変換ではないことに注意してください。(編集:それがあることが指摘されたnlモードでの缶の仕事が蓄積状態を必要としないが、私はちょうど使用していますnl質問を簡素化するための例として、実際にはコマンドは、より複雑なカスタムスクリプトです。。私が本当に探していますどのようなforは、入力ファイルのサブセクションに標準フィルターを適用する問題の一般的な解決策です) 出力は次のようになります。 line A line B 1 line X 2 line Y 3 line Z line C line D ファイルには、変換を必要とするこのようなセクションがいくつか存在する場合があります。 更新2私はもともと、たとえば次のようなセクションが複数ある場合に何が起こるかを指定しませんでした。 line A line B @@inline-code-start line X line Y line Z @@inline-code-end …

6
ssh公開鍵を複数のLinuxホストにコピーします
.ssh / id_rsa.pubを中央サーバーから複数のサーバーにコピーしようとしています。さまざまなサーバーに変更をプッシュするために通常使用する次のスクリプトがあります。 #!/bin/bash for ip in $(<IPs); do # Tell the remote server to start bash, but since its # standard input is not a TTY it will start bash in # noninteractive mode. ssh -q "$ip" bash <<-'EOF' EOF done しかし、この場合、ローカルサーバー上の公開キーをcatし、それを複数のサーバーに追加する必要があります。上記のヒアドキュメントスクリプトを使用して以下を実行する方法はありますか? cat .ssh/id_rsa.pub |ssh tony@0.0.0.0 'cat > .ssh/authorized_keys'
14 shell-script  ssh 

1
stdoutからカラーコードを取り除き、ファイルとstdoutにパイプする方法
私はprintfいくつかのtput混合物を使用するプログラムを持っているので、出力を標準出力とファイルにパイプしたいと思います。sedスクリプトに不要な依存関係が必要ないため、使用したいと思います。これが私がこれまでに得たものです。 printf "\n$(tput setaf 6)| $(tput sgr0)$(tput setaf 7)Sourcing files...\033[m\n" | tee install.log これに関する唯一の問題は、私のログファイルがすべてのカラー出力を取得していることです... ^[[36m| ^[(B^[[m^[[37mSourcing files...^[[m ただ持ってほしい | Sourcing files...

2
おそらく空白を含むファイル名のリストを扱うPOSIX準拠の方法
空白を含むファイル名を操作するための配列の使用を提案するBashスクリプトガイドを見てきました。ただし、DashAsBinShは配列には移植性がないことを示唆しているため、空白を含むファイル名のリストを扱うPOSIX準拠の方法を探しています。 以下のスクリプト例を修正して、 echo foo/target/a.jar foo/target/b.jar bar/target/lol whitespace.jar ここにスクリプトがあります #!/usr/bin/env sh INPUT="foo/target/a.jar foo/target/b.jar bar/target/b.jar bar/target/lol whitespace.jar" # this would be produced by a 'ls' command # We can execute the ls within the script, if it helps dostuffwith() { echo $1; }; F_LOCATIONS=$INPUT ALL_FILES=$(for f in $F_LOCATIONS; do echo `basename $f`; …

4
Ctrl-Zとkill -STOPの違いは何ですか?
makeシェルから(大規模なプロジェクトで)コマンドを実行すると、Ctrl-Zを入力してプロセスを停止し、シェルに戻ることができます。その後、fgプロセスを続行するために実行できます。 これを自動化するシェルスクリプトを作成しようとしています(具体的には、CPUの温度を数秒ごとに確認し、コンピューターが過熱しやすいため、高温になった場合はプロセスを停止します)。私の最初の試みは次のように機能しました(簡略化)。 make & subpid="$!" sleep 2 # If the CPU temperature is too high... kill -STOP "$subpid" sleep 2 # If the CPU temperature has dropped to safe levels... kill -CONT "$subpid" wait "$subpid" 残念ながら、これは機能しませんでした。プロセスにSIGSTOPを送信しても、プロセスは一時停止しませんでした(出力を端末に送信し続けることで明らかになりました)。make &コマンドラインで実行し、SIGSTOPを送信し、プロセスの状態をps;で確認しました。停止としてリストされていました(そしてSIGCONTを送信したときに再び開始しました)が、出力を吐き出し、コア温度を上昇させていました!Ctrl-Zで停止してもこの問題は発生しませんでしたが、スクリプトでそれを行う方法はわかりません。 Ctrl-Zとの違いは何kill -STOPですか?シェルスクリプトで前者の動作を取得するにはどうすればよいですか?

2
環境変数とコマンドの間にセミコロンを使用する場合
誰でもセミコロンがLANGbashによって更新されたと見なされるために必要な理由を説明できますか? 動作しません: > LANG=Ja_JP bash -c "echo $LANG" en_US 作品: > LANG=Ja_JP ; bash -c "echo $LANG" Ja_JP Linux上のbash 4.1.10とcygwinの同じバージョンの両方で作業しています

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