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

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

1
stdinをbashスクリプトに渡し、そのbashスクリプトで呼び出されるpythonスクリプトに渡したい
filestdin経由でコンテンツをフィードしたいpythonスクリプトを呼び出すbashスクリプトがあります。次のようにbashスクリプトを呼び出します。 ./script.sh < file そしての内容script.sh: #! /usr/bin/env bash pushd /some/python/virtual/environment/working/dir source venv/bin/activate python main.py ?????? deactivate popd bashスクリプト??????にfile与えられた内容をstdinとして pythonスクリプトに渡すために何を入力すればよいかわかりませんmain.py。 注fileかなりのテキストファイルとのbashのを使用することができるreadではないが望ましいです。 bashスクリプトを呼び出すときにstdinを使用する必要があります。私は何にでも渡すために柔軟ですmain.py。 この難問に取り組む方法はありますか? 添加 @casの回答から、どのコンテキストで使用するかについても説明する必要があることがわかりましたscript.sh。 の転送スクリプトscript.shとして使用したいのですが、内容は次のとおりです。~/.forward |/path/to/script.sh どの接尾辞がとして呼び出され/path/to/script.shますか。ログはそれについて明確です。次のような、シンプルなバージョンのpythonスクリプトを使用した簡単なテスト: |/path/to/simple/main.py postfixがmain.py標準入力のメールの内容で呼び出すことを示します。しかし、この組み合わせは機能していないようです。

3
readによって駆動されるwhileループ内でプロンプトとしてreadを使用しますか?
各反復の開始時に複数の変数を読み取り、ユーザーからの入力をループに読み込む必要があるユースケースがあります。 私が探索する方法がわからない解決策への可能な道- 割り当てには、標準入力の代わりに別のファイルハンドルを使用します for代わりにループを使用する... | while read ...... forループ内に複数の変数を割り当てる方法がわかりません echo -e "1 2 3\n4 5 6" |\ while read a b c; do echo "$a -> $b -> $c"; echo "Enter a number:"; read d ; echo "This number is $d" ; done

5
文字列の一部を認識しながら文字列を検索し、文字列を返す
たとえば、文字列があります "Icecream123 AirplaneBCD CompanyTL1 ComputerYU1" 私の文字列には必ず部分文字列IceCreamが含まれていることはわかっていますが、その後に何があるかわかりません。 それは私の例のように123かもしれませんし、何か違うかもしれません。 次のコマンドを使用して、grepを使用して文字列に「Icecream」サブストリングが存在するかどうかを検出できますが echo $string | grep -oF 'Icecream'; どちらが印刷されます Icecream 部分文字列全体を出力するコマンドを使用したいのですが、私の例では Icecream123 もちろん、アイスクリームに続くものはランダムで事前にわかっていないので、私はただ行うことができません $SUBSTRING=$(echo $string | grep -oF 'Icecream') $SUBSTRINGTRAIL=123 echo $SUBSTRING$SUBSTRINGTRAIL

4
多くの大きなファイルで重複する行を見つける方法は?
30k以下のファイルがあります。各ファイルには〜100k行が含まれます。行にはスペースが含まれていません。個々のファイル内の行はソートされ、複製されません。 私の目標:2つ以上のファイルにまたがるすべての重複行と、重複したエントリを含むファイルの名前も検索したいです。 簡単な解決策はこれです: cat *.words | sort | uniq -c | grep -v -F '1 ' そして私は走るでしょう: grep 'duplicated entry' *.words より効率的な方法がわかりますか?

1
スクリプトの履歴拡張は無効になっていますか?
次のエラーは!履歴の拡張に使用されたことが原因であると理解しています。 $ echo "Hello!Tim" bash: !Tim: event not found ただし、コマンドをスクリプトに入れてスクリプトを実行しても問題はありません。 $ cat myscript echo "Hello!Tim" $ bash myscript Hello!Tim 何故ですか?bashマニュアルに理由が記載されていますか?

1
同じスクリプトでbashと期待しますか?
.csvファイルからIPアドレスを取得し、デバイスにtelnetして「show version」コマンドの出力をキャッチするスクリプトをコーディングしようとしています。 これまでのところ私はこれをコーディングしました: #!/bin/bash #!/usr/bin/expect -f FILE1=dispositivos.csv #file with IP's and device name set Username "user" #this is the user for telnet connection. set Password "this.is.the.pass" #pass for telnet connection. NUMERODISP="$(wc -l $FILE1 | awk '{print $1}')" #this command counts number of devices (IP's) in the file as it is …

3
タイムアウト関数の戻り値
スクリプトを5秒待つために、debianでタイムアウト機能を使用しています。うまく動作しますが、問題は戻り値が必要なことです。タイムアウトの場合は1、タイムアウトなしの場合は0のようにします。 私のコードを見てください: timeout 5 /some/local/script/connect_script -x 'status' > output.txt # here i need the return of timeout ご覧のとおり、connect_script -x 'status'はステータスを文字列として返し、画面に出力します(おそらくこれは表示されません)。この問題の背景は、サーバー(connect_script)がフリーズしている場合、スクリプトは何もしないことです。 。そのため、そのあたりのタイムアウトが必要です。そして、それがタイムアウトしたとき、サーバーを再起動したいと思います。私はそれを行うことができますが、タイムアウトかどうかを確認する方法はわかりません...

3
TCPトラフィックを生成するツール
ポート0からポート65535までのTCPトラフィックを生成したい ジェネレータは、TCP ACKがあるかどうかを気にする必要はありません。 そのようなトラフィックを生成できるツールはありますか? iperfとスクリプトでそれを行うことは可能ですか? つまり、Windowsでも実行できますか?

6
awk-複数の.datファイルの2行目を1つのファイルに出力する
次のような複数のファイルがあります:(実際には80あります) file1.dat 2 5 6 9 7 1 file2.dat 3 7 8 4 1 3 2行目がすべて含まれているファイルが必要です。すなわち output.dat 6 9 8 4 これまでのところ、ファイル名をループしますが、その前にファイルを上書きします。たとえば、上記のファイルの出力は次のようになります 8 4 私のシェルスクリプトは次のようになります。 post.sh TEND = 80 TINDX = 0 while [ $TINDX - lt $TEND]; do awk '{ print NR==2 "input-$TINDX.dat > output.dat TINDX = $((TINDX+1)) done

3
末尾の改行を削除せずにstdinを変数にキャプチャするにはどうすればよいですか?
シェルスクリプトで... 末尾の改行を削除せずにstdinを変数にキャプチャするにはどうすればよいですか? 今私は試しました: var=`cat` var=`tee` var=$(tee) すべての場合$varにおいて、入力ストリームの末尾の改行はありません。ありがとう。 また、入力に後続の改行がない場合、ソリューションは追加しません。 承認された回答に照らして更新: 私のコードで使用した最終的な解決策は次のとおりです。 function filter() { #do lots of sed operations #see https://github.com/gistya/expandr for full code } GIT_INPUT=`cat; echo x` FILTERED_OUTPUT=$(printf '%s' "$GIT_INPUT" | filter) FILTERED_OUTPUT=${FILTERED_OUTPUT%x} printf '%s' "$FILTERED_OUTPUT" 完全なコードを確認したい場合は、エキスパンダーのgithubページを参照してください。エキスパンダーは、情報セキュリティの目的で開発した小さなオープンソースのgitキーワード展開フィルターシェルスクリプトです。.gitattributesファイル(ブランチ固有にすることができます)およびgit configで設定されたルールに従って、git は、リポジトリにチェックインまたはチェックアウトするたびに、expandr.shシェルスクリプトを介して各ファイルをパイプ処理します。(そのため、末尾の改行またはその欠如を保持することが重要でした。)これにより、機密情報をクレンジングし、テスト、ステージング、およびライブブランチの環境固有の値の異なるセットを交換できます。

3
bashスクリプトでネットワークを待つ
ネットワークの稼働とネットワーク共有のマウントに依存するスクリプトを実行しています。スクリプトはログイン時に実行されます(起動後に自動的に実行されます)。問題は、スクリプトが実行されるときまでに、通常はまだIPアドレス(DHCP)を持っていないことです。現時点では15秒間スクリプトをスリープ状態にしていますが、何か問題があるかどうかをユーザーに通知できるようにしたいので、この方法はまったく好きではありません。 私の計画は、IPアドレスをまだ持っていないときにループし、持っているときに続行することです。重要なのは、しばらくするとタイムアウトになることです。私が思いついたのはですがif [ ifconfig | grep "192.168.100" ];、何が起こるかは、grepがを消費し、];それが気に入らないことです。それからbashも動揺します、なぜならそれは];どのgrepが食べたかを見つけることができないからです。そして、私はタイムアウトを実装していません。 誰かが変数を保持し、たとえば各反復で1秒間スリープし、この変数を毎回増やすことを提案しました。これが私の完全な(動作しない)スクリプトです(私はbashスクリプトにかなり慣れていません)。 x=0 while [ ifconfig | grep "192.168.100." > /dev/null ]; do echo "no nework" if "$x" -gt 200; then #Time out here exit 1 x=$((x+1)) sleep .1 fi done #continue with rest of script... 正しい方向のポインタがあれば大歓迎です!

2
'EOF'を使用し、変数をリテラルと見なすbashスクリプトに変数を渡す[クローズ]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 5年前休業。 このスクリプトでは、 "$ 1"が/ testファイルに保存されることになります。 #!/bin/bash cat > /test << 'EOF' $1 EOF 真実は..私は保つ必要があります 'EOF' 引数($ 1)にドル記号が含まれているため、「EOF」として。 $ 1ではなく、その引数を保存する必要があります

1
GPG公開鍵をキーリングに追加せずにスクリプトに埋め込む方法はありますか?
基本的に次のことを行う必要があるスクリプトがあります。 #!/bin/bash GPG_PUBLIC_KEY=<<EOF -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.12 (GNU/Linux) ... -----END PGP PUBLIC KEY BLOCK----- EOF gpg --encrypt --with-public-key "$GPG_PUBLIC_KEY" myfile.txt 最初にGPGキーをキーリングにインポートせずにこれを行う方法はありますか?


5
プロセスを聞く方法はありますか?
LinuxとUNIXでプロセスをリッスンする方法があるかどうか知りたい-プロセスがいつ終了し、プロセスの終了コードが何であるか(スクリプト)。 X数秒実行しps -ef | grep PIDて、プロセスがまだ生きているかどうかを確認するスクリプトを作成したくありません。プロセスが終了したときに通知する方法と、その終了コードを教えてください。

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