タグ付けされた質問 「scripting」

スクリプトは、スタンドアロンの実行可能プログラムにコンパイルされるのではなく、インタープリタープログラムによって実行される一連のコマンドまたは命令です。

3
シェルスクリプトでstderrへのリダイレクトを使用する場合
grepのような行儀の良いユーティリティは、stdoutに「通常の」メッセージを、stderrにエラーメッセージを出力することを知っています。 $ grep '^foo' file1 file2 file1:foo grep: file2: No such file or directory シェルスクリプトを自分で書いているとき、stderrにどの出力とメッセージを表示するか、または気にする必要があるかどうかを判断するのが難しいことがよくあります。 私は良い習慣について知りたいです:いつメッセージをstderrにリダイレクトするのが適切であり、そうでないのか? 「依存します」は確かですが、これらの決定を下すのに役立つ洞察はありますか? この主観的な質問を形式に合うようにするために、「なぜ」に対処し、経験と可能であれば事実に裏打ちされた情報が得られる答えを奨励したいと思います。

5
スクリプトのシバンラインに複数の可能性を持たせるにはどうすればよいですか?
さまざまな環境(およびPATH)を持ち、さまざまなLinuxシステムでさまざまなユーザーが理論的に実行できるPythonスクリプトがあるという興味深い状況に少しあります。このスクリプトは、人為的な制限なしにこれらの可能な限り多くで実行できるようにします。既知のセットアップを次に示します。 Python 2.6はシステムのPythonバージョンであるため、python、python2、およびpython2.6はすべて/ usr / binに存在します(同等です)。 Python 2.6は上記のシステムPythonバージョンですが、Python 2.7はpython2.7としてインストールされます。 Python 2.4はシステムのPythonバージョンであり、私のスクリプトではサポートされていません。/ usr / binには、同等のpython、python2、python2.4、およびスクリプトがサポートするpython2.5があります。 これら3つすべてで同じ実行可能なPythonスクリプトを実行したいと思います。最初に/usr/bin/python2.7を使用し、存在する場合は、/ usr / bin / python2.6にフォールバックし、次に/usr/bin/python2.5にフォールバックしてから、それらのどれも存在しなかった場合、単にエラーになります。ただし、可能な場合は正しいインタープリターの1つを見つけることができる限り、可能な限り最新の2.xを使用してハングアップしません。 私の最初の傾向は、シェバンラインを次のように変更することでした。 #!/usr/bin/python に #!/usr/bin/python2.[5-7] これはbashで正常に機能するためです。ただし、スクリプトを実行すると次のことができます。 /usr/bin/python2.[5-7]: bad interpreter: No such file or directory さて、bashでも機能する次のことを試してみてください: #!/bin/bash -c /usr/bin/python2.[5-7] しかし、再び、これは失敗します: /bin/bash: - : invalid option もちろん、正しいインタープリターを見つけて、見つかったインタープリターを使用してpythonスクリプトを実行する別のシェルスクリプトを作成することもできます。最新のpython 2インタープリターをインストールして実行する限り、1つで十分な2つのファイルを配布するのは面倒です。インタプリタを明示的に呼び出す(たとえば、$ python2.5 script.py)ように人々に依頼することは選択肢ではありません。特定の方法で設定されているユーザーのPATHに依存することもオプションではありません。 編集: Python 2.6の時点で存在する(with …
15 bash  scripting  python 

9
ネストされたzipファイルの抽出
多数のzipアーカイブがあり、それぞれに多数のzipアーカイブが含まれています。このzipアーカイブとその子zipアーカイブに含まれるすべてのファイルを再帰的に抽出する最良の方法は何ですか?
15 files  scripting  zip 


3
ターミナルを使用してさまざまなウィンドウで「閉じる」イベントをシミュレートする方法はありますか?
私はUbuntuはASKに答えのすべてのインスタンスを終了しgnome-terminal、コマンドを経由していますすべてが読むことができるようすることgnome-terminalがあるようですいなかったSIG私は、この「閉じる」イベントをシミュレートするために使用することができますコールを。GNOME / KDE / LXDE / {ここにウィンドウ/デスクトップマネージャー/環境を配置}で「閉じるボタンをクリック」イベントをシミュレートする方法はありますか?私が持って読んで 異なる 質問 これとは関係を持っている可能性を、これに応答しません。 私が探しているのは、さまざまなシナリオでこれを行うためのグローバルコマンド(存在する場合)です。存在しない場合は、「閉じる」ボタンの仕組みを説明してください。 可能な用途: 確定したタスクの一連のアプリケーションを開き、それらをすべて(もはや使用されていない場合)を押さずに単一のストローク/コマンドで閉じますか?作業を保存しますか?アラート。 すべてのgnome-terminalインスタンスを閉じますが、まだ実行中の子プロセスがある場合は警告します。 今、私の頭に浮かぶものは他にありません...

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

3
Systemd postgresql起動スクリプト
私はpostgresqlを2番目のサーバーにインストール中です 以前にpostgresqlをインストールしてから、提供されたスクリプトを使用しました ./contrib/start-scripts/linux 正しいディレクトリに配置 # cp ./contrib/start-scripts/linux /etc/rc.d/init.d/postgresql92 # chmod 755 /etc/rc.d/init.d/postgresql92 その後、期待どおりに実行できました # service postgresql92 start しかし、新しいマシンはSystemdを使用しており、これを行うにはまったく異なる方法があるようです 私はこれをハックして何かを台無しにしたくないので、誰かが同じ結果を達成する方法の正しい方向に私を向けることができるかどうか疑問に思っていました

3
N-way diffを実行するにはどうすればよいですか?
複数のコマンドの出力をどのように比較しますか?vimdiff最大4つのファイルをサポートできますが、それdiff自体はちょうど2つのファイルをサポートしているようです。 のバリアントで直接可能ですかdiff、すべてのコマンドの出力を一時ファイルに保存し、1つを選択して残りをそれと比較する必要がありますか? 環境: 複数のサーバーで特定のコマンドの出力を確認し、それらすべてが一致するかどうかを確認する必要があります。現時点では、違いが見つかった場合に報告するだけで良いように思えますが、可能であれば、X%サーバーが互いに同意し、Y%が互いに同意します。または、そのサーバーZが奇数です。 4方向のマルチマスターLDAPセットアップがあり、ContextCSN4つすべての値が互いに一致していることを確認したい。 だから今私は: #! /bin/bash for i in {1..4}.ldap do ldapsearch -x -LLL -H ldap://$i -s base -b dc=example,dc=com contextCSN > $i.csn; done set -e for i in {2..4} do diff -q 1.csn $i.csn done そして、スクリプトのエラーコードを確認します。これのためのより良いツールはありますか? Ubuntu 14.04で使用できるすべてのツールを歓迎します。
14 scripting  diff 

7
ファイルから複数の空白行を削除する方法は?
メモを作成するために使用するテキストファイルがいくつかあります-単なるプレーンテキストで、通常は単にを使用しcat >> fileます。ときどき、空白行または2行(ちょうど戻る-改行文字)を使用して、新しい主題/思考の行を指定します。各セッションの最後に、Ctrl+ Dでファイルを閉じる前に、通常、セッションを分離するためだけに多く(5〜10)の空白行(リターンキー)を追加します。 これは明らかにあまり賢いものではありませんが、この目的には役立ちます。しかし、私はたくさんの不要な空白行で終わるので、余分な行(のほとんど)を削除する方法を探しています。いくつかのオプションで直接使用できるLinuxコマンド(カット、貼り付け、grep、...?)はありますか?また、誰かがsed、awkまたはperl(私はsedまたはawkが好きですが、実際にはスクリプト言語でも)のスクリプトを考えていますか?C ++で何かを書く(実際に自分でできる)のは、やり過ぎのように思えます。 ケース#1:必要なのは、連続する2行以上(3行以上)の空白行を削除し、それらを2行だけの空白行に置き換えるスクリプト/コマンドです。ただし、複数の行(2行以上)を削除したり、複数の空白行を1つの空白行に置き換えたりできるように調整できると便利です。 ケース#2:2行のテキスト間の単一の空白行を削除するスクリプト/コマンドを使用することもできますが、複数の空白行をそのまま残します(ただし、空白行の1つを削除してもかまいません)。
14 scripting  sed  awk  perl  filter 

6
1行を使用して複数のコマンドをsftpに送信する方法
次のコマンドはsftp、1行を使用して1 つのコマンドを送信します。 sftp -o PasswordAuthentication=no user@host" <<<"lcd /home" sftp1行を使用して複数の行を送信する方法。キャリッジリターンまたはこれを達成するための何かを挿入する方法はありますか。 sftp -o PasswordAuthentication=no user@host" <<<"lcd /home\n cd /myhome\n get file" アイデアは、sftp -bコマンドをリストする外部ファイルがロードされるオプションを使用しないことです。
14 scripting  sftp 

1
インタプリタバイナリをsetcap 'せずに、スクリプトで機能を使用できますか?
現在cap_net_bind_service MY_USERNAME、/ etc / security / capability.confで使用しています。 ここcap_net_bind_service+iで、libcap [-ng]を介しCAP_NET_BIND_SERVICEて効果的なセットに追加できるように、お気に入りのスクリプト言語のインタープリターを設定する必要があります。 これは正常に機能しますが、インタープリターバイナリに上限を設定せずに同じことを達成する方法があるのだろうかと思います。これは大きな問題ではありませんが(他のユーザーアカウントには上限がないため、インタープリターバイナリにビットが設定されていても使用できません)、インタープリターが毎回フラグを再設定する必要があるため、多少面倒です更新しました。

3
Bashがエラーをスローする、8行目:$ 1:バインドされていない変数
私はgetoptsを使用する方法を学ぼうとしているので、解析された入力でスクリプトを使用できます(getoptsの方が良いと思いますが)。パーティションの使用率を返す簡単なスクリプトを作成しようとしています。問題は、bash関数の1つが、関数$1内の変数として参照しているように思われないことです。参照する理由$1はget_percent、すべてのマウントポイントの代わりに、関数にオプションの引数としてマウントポイントを渡すことができるためです。 スクリプト #!/usr/bin/bash set -e set -u set -o pipefail get_percent(){ if [ -n "$1" ] then df -h $1 | tail -n +2 | awk '{ print $1,"\t",$5 }' else df -h | tail -n +2 | awk '{ print $1,"\t",$5 }' fi } usage(){ echo "script usage: $(basename …

4
スクリプトを介してsftp接続でコマンドを実行する
これは非常に基本的な質問であり、bashの初心者であり、これを行う方法がわかりませんでした。グーグルは残念ながら私をどこにも連れて行ってくれませんでした。 私の目標は、sftpでサーバーに接続し、ファイルをアップロードしてから切断することです。 次のスクリプトがあります。 UpdateJar.sh #!/bin/bash sftp -oPort=23 kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins #Change directory on server #cd /home/kalenpw/TestWorld/plugins #Upload file put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar exit 問題は、このスクリプトがsftp接続を確立してから何もしないことです。接続で手動でexitと入力すると、putコマンドを実行しようとしますが、sftpセッションが閉じられているため、単にput:command not foundと表示されます。 これを適切に機能させるにはどうすればよいですか? ありがとう

5
mawkで独自のスクリプト名を印刷する方法は?
bash $0にはスクリプトの名前が含まれていますが、awkには次の内容でmyscript.awkという名前のスクリプトを作成した場合: #!/usr/bin/awk -f BEGIN{ print ARGV[0] } 実行すると、「awk」のみが出力されます。また、i> 0のARGV [i]は、コマンドラインのスクリプト引数にのみ使用されます。それでは、スクリプトの名前、この場合は「myscript.awk」を印刷する方法は?
13 awk  scripting  mawk 

4
SSHキーの管理に関するアドバイス
多くのSSHキーペアを管理するために見つけたベストプラクティスは何ですか? 私はSSHを使用して、自宅でも職場でも、いくつかのシステムに接続しています。現在、仕事用と家庭用の両方のシステムのキーペアの管理可能なコレクションはかなり小さくなっています。混乱を避けるために、名前付きキーペアを生成するスクリプトがあります。 私のホームネットワークは、ラップトップ(ubuntu)、2つのデスクトップ(ubuntu / fedoraデュアルブート、fedora / windowsデュアルブート)、およびメディアシステム(ubuntu)で構成されています。職場では、個人のラップトップ(自宅での作業に使用)、デスクトップ(fedora)、実稼働システム(RHEL)、およびWindows(ため息)とVM(fedora)を備えたラップトップがあります。これまでのところすべて良い。 (仕事用システムにホームキーペアを置くことも、ホームシステムに仕事用キーペアを置くことにも興味がありません。また、プライベートキーが本番マシンに存在する必要がある他のシステムとのファイル転送を機械化する仮想ユーザーアカウントがあります。他のシステム間でファイルを転送します。) しかし今、Hadoopが登場します。Hadoopは、100以上のシステムの大規模なクラスターであり、その複雑さ、ユーザー、およびキーペアの数が増えています。次に、キーを管理する必要があります。 (明確にする必要があります。Hadoopクラスターを展開しているクライアントに相談するソフトウェア開発者です。彼らはキーを管理する必要があります。クラスターにアクセスする多くの人がいます。システムに公開キーを配置する必要があります。 Linuxの知識が豊富で、彼らは私に助けを求めました。 公開キーをリモートシステムに公開する必要がある場合、すべての「ハウツー」Webページでは、上書き(>)(既存のキーを破棄)または追加(>>)(これは良い、既存のキーを保持)のいずれかを提案します。しかし、宛先マシン上の各公開鍵を個別に保存し、それらを組み合わせる方が良いと思います。アドバイスを探しています。 多くのキーを管理するために見つけたベストプラクティスは何ですか? ありがとうございました! 編集:1つの側面は、多くのシステムにキーを配置する必要があることと、特定のユーザーに付随するCRUD(作成、読み取り、更新、削除/無効化)です。つまり、どのキーがどのユーザーに属しているかを識別できる必要があります。
13 ssh  scripting 

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