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

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

1
`nohup`を使用して実行されるプログラムの環境変数を設定するにはどうすればよいですか?
(私は既存のBashスクリプトを編集しているので、おそらくここで愚かな間違いをしています...) 次のように、環境変数を引数としてコマンドを保存するシェルスクリプトがあります。 COMMAND="mvn clean install -P $MAVEN_PROFILE" 次に、nohupおおよそ次のようにコマンドを実行します。 nohup $COMMAND > logfile これは機能します。 ここで、Mavenでアクセスできる環境変数を設定します。私は次のようなことをいくつか試しました: COMMAND="FORMAVEN=valueForMaven mvn clean install -P $MAVEN_PROFILE" ...しかし、それは単に次のように終了します: nohup: failed to run command `FORMAVEN=valueForMaven': No such file or directory ここには関係のない概念がいくつかあるように思いますが、どれも理解していないし、知りさえしていません。上記を行うには何が必要ですか?

5
シェルスクリプトでMySQLからの警告メッセージを抑制しますが、エラーを許可します
基礎となるいくつかのMySQLコマンドを使用してシェルスクリプトを実行しているときに、ログファイルが次のメッセージでダンプされます。 ここにメッセージがあります: 「警告:コマンドラインインターフェースでのパスワードの使用は安全でない場合があります。」 これらのメッセージを停止するには、次のジョブ定義を使用しています。 例: run_wrapper.sh |grep -v "Warning: Using a password" > output.log 2>&1 これは機能しましたが、MySQLエラーはに記録されていませんoutput.log。 次のように定義を変更すると、MySQLエラーが表示され始めます run_wrapper.sh > output.log 2>&1 では、問題は警告メッセージを抑制し、cron定義のみを使用してログファイルにSQLエラーを報告する方法です。

7
ディレクトリ内の特殊文字とスペースを含むすべてのファイルの名前を変更するにはどうすればよいですか?
名前に空白スペースと特殊文字($と@)が含まれている特定のディレクトリにあるすべてのファイルの名前を変更するにはどうすればよいですか? rename次のコマンドを試して、すべてのスペースと特殊文字を_に置き換えました。 $ ls -lrt total 464 -rwxr-xr-x. 1 pmautoamtion pmautoamtion 471106 Jul 17 13:14 Bharti Blocked TRX Report Morning$AP@20150716.csv $ rename -n 's/ |\$|@/_/g' * $ ls -lrt total 464 -rwxr-xr-x. 1 pmautoamtion pmautoamtion 471106 Jul 17 13:14 Bharti Blocked TRX Report Morning$AP@20150716.csv $ コマンドは機能しますが、ファイル名に変更を加えたり、エラーを返したりすることはありません。どうすればこれを修正できますか?他の方法もありますか?

6
bashを使用して重複ファイルを削除する方法
md5sum(md5Macでは)ファイルが重複しているフォルダーがあり、cron 見つかったジョブを削除するようにスケジュールされたジョブ。 しかし、私はこれを行う方法にこだわっています。これまでのところ: md5 -r * | sort これは次のようなものを出力します: 04c5d52b7acdfbecd5f3bdd8a39bf8fb gordondam_en-au11915031300_1366x768.jpg 1e88c6899920d2c192897c886e764fc2 fortbourtange_zh-cn9788197909_1366x768.jpg 266ea304b15bf4a5650f95cf385b16de nebraskasupercell_fr-fr11286079811_1366x768.jpg 324735b755c40d332213899fa545c463 grossescheidegg_en-us10868142387_1366x768.jpg 3993028fcea692328e097de50b26f540 Soyuz Spacecraft Rolled Out For Launch of One Year Crew.png 677bcd6006a305f4601bfb27699403b0 lechaustria_zh-cn7190263094_1366x768.jpg 80d03451b88ec29bff7d48f292a25ce6 ontariosunrise_en-ca10284703762_1366x768.jpg b6d9d24531bc62d2a26244d24624c4b1 manateeday_row10617199289_1366x768.jpg ca1486dbdb31ef6af83e5a40809ec561 Grueling Coursework.jpg cdf26393577ac2a61b6ce85d22daed24 Star trails over Mauna Kea.jpg dc3ad6658d8f8155c74054991910f39c smoocave_en-au10358472670_1366x768.jpg dc3ad6658d8f8155c74054991910f39c smoocave_en-au10358472670_1366x7682.jpg ファイルのMD5に基づいて処理して重複を削除するにはどうすればよいですか?どの「オリジナル」を保持するかは特に気にしませんが、保持したいのは1つだけです。 これに別の方法でアプローチする必要がありますか?

1
getoptsを使用して1つのオプションに2つの引数を提供します
以下のコードでオプションrを指定getoptsすると、1つの引数が必要になります。 while getopts ":hr::l:" opt; do case $opt in r ) echo "Run Numbers - argument = $OPTARG " ;; l ) echo "Latency range - argument = $OPTARG" ;; h ) helptext graceful_exit ;; * ) usage clean_up exit 1 esac done しかし、-rオプションの後に、1つではなく2つの引数を渡す必要があります。これを行う簡単な方法はありますか?

1
LinuxでCSVをXLSファイルに変換する
次のPerlスクリプトはCSVファイルをXLSファイルに変換できます 問題は、顧客のLinuxマシンに多くのPerlモジュールをインストールする必要があることです。 このPerlスクリプトを実行するために、そして実際には私はできません。Linuxマシンは顧客のマシンだからです(モジュールをインストールすることはできません) そのため、このPerlスクリプトの他の代替手段を見つける必要があります 最初の顧客はLinux red-hatマシンバージョン5.Xを持っています そして、perlスクリプトと同じように機能するbash / ksh / sh / awkスクリプトを見つけたい CSVをXLSファイルに変換する他の代替策を見つけたい このスクリプトを見つける方法を教えてください。またはLinuxマシンでCSVをXLSに変換するためのその他のアドバイス #!/usr/bin/perl -w ############################################################################### # # Example of how to use the WriteExcel module # # Simple program to convert a CSV comma-separated value file to an Excel file. # This is more or less an …
10 linux  bash  shell-script  awk  perl 

3
ファイルからbashスクリプトに引数を渡す
私はこの状況を持っています: ./ ./myscript.sh ./arguments.txt ./test.sh 内部myscript.shでは、ファイルを実行test.shして、内部に含まれている引数をそれに渡さなければなりませんarguments.txt。 myscript.shは次のとおりです。 arguments=$(cat arguments.txt) source test.sh $arguments これは、arguments.txtに最大で1つの引数が含まれている場合にうまく機能します。 firstargument 置換は次のとおりです。 ++ source test.sh 'firstargument' しかし、問題は2つ以上の引数にあります。これを行います: ++ source test.sh 'firstargument secondargument' また、内部の引数の数は事前にわかりませんarguments.txt。ゼロ以上の場合があります。

3
親プロセスへのSIGINTの伝播の防止
子シェルスクリプトの実行中にControl + C(またはINTR文字に設定されている文字)を押すと、親プログラム(C ++プログラムまたはシェルスクリプト)が子シェルスクリプトを実行するシナリオを考えます。 SIGINTは、フォアグラウンドプロセスグループのすべてのプロセスに送信されます。これには、親プロセスが含まれます。 出典:POSIX.1-2008 XBDセクション11.1.9 このデフォルトの動作をオーバーライドする方法はありますか?子プロセスだけが親に伝播せずに信号を処理することですか? 参照:スタックオーバーフローポスト-子が中断されたときに親プロセスが完了しない(TRAP INT)

1
文字列の前に「-」を付けて、bashでファイルに複数の行を追加する方法
「bashを使用してファイルに複数の行を追加する方法」によく似た質問ですが、ファイルを--で開始し、可能であればファイルにも追加したいと考えています。 printf "--no-color\n--format-doc\n--no-profile\n" >> ~/.rspec-test 問題は、ファイルを「-」で開始することです。 -bash: printf: --: invalid option printf: usage: printf [-v var] format [arguments] エスケープする方法はあり--ますか?代替案はありますか?私が使用して複数の行を行う方法がわからないんだけどecho、とcat私は自動化されたスクリプトでそれをしたいのですが、良いオプションではありません。

1
リモートからサーバーをテストし続けるシェルスクリプトを書き込もうとしたが、ログアウトするとelseステートメントに落ち続ける
サーバーをテストし続け、サーバーがダウンしたときにメールで通知するシェルスクリプトをここに記述しようとしています。 問題は、ssh接続からログアウトすると&、のようにコマンドの最後で実行したにもかかわらず./stest01.sh &、自動的に他の場所に分類され、再度ログインして強制終了するまで中断なくメールを送信し続けることです。 #!/bin/bash while true; do date > sdown.txt ; cp /dev/null pingop.txt ; ping -i 1 -c 1 -W 1 myserver.net > pingop.txt & sleep 1 ; if grep "64 bytes" pingop.txt ; then : else mutt -s "Server Down!" myemail@address.com < sdown.txt ; sleep 10 ; fi …

4
ループと拡張のパフォーマンス
以下の比較に関する専門家の提案が必要です: ループを使用したコードセグメント: for file in `cat large_file_list` do gzip -d $file done 単純な拡張を使用したコードセグメント: gzip -d `cat large_file_list` どちらが速くなりますか?大きなデータセットを操作する必要があります。

3
サポートされていない「ショップ」オプションが.bashrcでエラーを発生させないようにするにはどうすればよいですか?
さまざまなバージョンのBashをさまざまなHPCノード、VM、または個人用ワークステーションで実行している可能性がある、比較的異種の環境で作業しています。私はログインスクリプトをGitリポジトリに配置しているので.bashrc、「もしこのホストなら...」タイプの面倒さをあまり使わずに、同じように全面的に使用したいと思います。 私のようなバッシュ≤拡大し4.1のデフォルトの動作cd $SOMEPATHにcd /the/actual/path押したときにTabキーを。バッシュ4.2以上では、あなたがする必要があるだろうshopt -s direxpandし、この動作を再度有効にし、それが利用可能になっていませんでした4.2.29まで。ただし、これはほんの一例です。別の、おそらく関連するshoptオプションcomplete_fullquote(それが何をするのか正確にはわかりませんが)もv4.2でデフォルトの動作を変更した可能性があります。 ただし、direxpand以前のバージョンのBashでは認識されないためshopt -s direxpand、自分のを使用しようとする.bashrcと、古いBashのノードにログインするたびにエラーメッセージがコンソールに出力されます。 -bash: shopt: direxpand: invalid shell option name 私は何をしたいのは、条件付きの周りをラップでshop -s direxpandバッシュの旧バージョン(擦れずに、堅牢な方法でバッシュ> 4.1にそのオプションを有効にするには、すなわち、ちょうどにエラー出力をリダイレクトしません/dev/null)。

1
行内の違いのみを示す差分
2つのファイルの行を比較したいのですが、出力のノイズを最小限に抑えるために、実際の行の違いだけを印刷したいと思います。 たとえば、以下の2つのファイルがあるとします。 a.txt a b c d e f g h i j k l m n o p q r s t u v w x y z b.txt a B c d e f g h i j k l m n o p q r s t …

3
アンパサンドを「可変化」する(プロセスのバックグラウンド)
アンパサンドを変数に入れ、それを使用してプロセスをバックグラウンドに送信する方法があるかどうかを知りたいです。 これは機能します: BCKGRND=yes if [ "$BCKGRND" = "yes" ]; then sleep 5 & else sleep 5 fi しかし、これら5つのラインを1つだけで達成するのはクールではないでしょうか。そのようです: BCKGRND='&' sleep 5 ${BCKGRND} しかし、それはうまくいきません。BCKGRNDが設定されていない場合は機能しますが、設定されている場合はリテラル「&」として解釈され、エラーになります。

2
コマンドを動的に作成する
私はスクリプトで作業しており、tarコマンドを動的に作成する必要があります。 ここに私が何をしようとしているのかを説明する2つの例があります: #!/bin/bash TAR_ME="/tmp" EXCLUDE=("/tmp/hello hello" "/tmp/systemd*" "/tmp/Temp*") _tar="tar "`printf -- '--exclude="%s" ' "${EXCLUDE[@]}"`" -zcf tmp.tar.gz" echo COMMAND: "${_tar}" ${_tar} "$TAR_ME" echo -e "\n\nNEXT:\n\n" EXCLUDE=("--exclude=/tmp/hello\ hello" "--exclude=/tmp/systemd*" "--exclude=/tmp/Temp*") _tar="tar "`printf -- '%s ' "${EXCLUDE[@]}"`" -zcf test.tar.gz" echo COMMAND: "${_tar}" ${_tar} "$TAR_ME" _tarコマンドとして使用できるようにしたいのですが、クラシックパスで機能させることができましたが、フォルダ名のスペースを操作する必要があります。そして、毎回次のようなエラーが発生しました: COMMAND: tar --exclude="/tmp/hello hello" --exclude="/tmp/systemd*" --exclude="/tmp/Temp*" -zcf tmp.tar.gz …

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