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

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

4
変数展開のあるbashスクリプトで-execを見つける
bashスクリプトで次のようなコマンドを実行しようとしています。のすべてのサブフォルダーを検索し$sourcedir、特定の種類のすべてのファイルをのルートレベルにコピーする必要があります$targetdir。 #!/bin/bash # These are set as arguments to the script, not hard-coded sourcedir="/path/to/sourcedir" targetdir="/path/to/targetdir" find "$sourcedir" -type f -name "*.type" -exec sh -c 'cp "$1" "$2/`basename "$1"`"' "{}" "$targetdir" \; ことを除いて、これは、かなり近いように思える{}ように渡されていない$2と-exec sh -c ... これをできる限り「正しい方法」に近づけ、ファイル名の特殊文字(具体的には一重引用符文字)の許容範囲内で行いたいと思います。 編集:私は人々がxargs引数チェーンを使用することを提案しているのを見ます。私は、これは限られた数の議論に対してのみ大丈夫であるという印象を受けていました。たとえば、多数のギャラリーディレクトリから巨大なスライドショーディレクトリにコピーしようとしている数千の.jpgファイルがある場合、引数をチェーン化したソリューションは引き続き機能しますか? 編集2:私の問題は_、-execコマンドでshする最初のオプションの前に行方不明でした。findコマンドを機能させる方法に興味がある人は_、すべて追加してください。 find "$sourcedir" -type f -name "*.type" -exec sh -c 'cp "$1" "$2"' …


3
tail -f、ログが3秒間アイドルになった後に改行を挿入しますか?
を行うときにtail -f error.log、3秒間ファイルに何も適用されなかった後にプログラムで改行を挿入する方法は? (明らかに、1つの改行が追加されたら、テキストの他の行がログファイルに追加されるまで、他の改行は追加されません) たとえば、これらの行はerror.logに追加されます: foo bar boo [[wait 4 seconds]] 2far 2foo 2bar 2boo [[wait 40 seconds]] 2far これはコンソールの出力です: foo bar boo 2far 2foo 2bar 2boo 2far

4
bash(または他のシェル)スクリプトでスペースの数が問題になるケースは何ですか
bash他のシェルスクリプトではスペースが重要であると言われましたが、何をしているのかわからない限り、スペースの存在を変更しないでください。「存在を変える」と私はどちらかなどが変化する、二つの非空白文字の間にスペースを挿入するか、二つの非空白文字の間にスペースを取り除く意味var="$val"するvar ="$val"、またはその逆。聞きたい シェルスクリプトで単一のスペースを使用したり、複数の連続したスペースを使用したりすると、違いが生じる場合はありますか?。 (もちろん、引用符でスペースを挿入/削除すると違いが生じます。例えば、からecho "a b"、echo "a b"またはその逆に変更します。この些細な例以外の例を探しています。) 私はこの質問に出くわしましたが、その1つは2つの非スペース文字の間にスペースを追加および削除することです。 任意の助けをいただければ幸いです。可能であれば、より多くの種類のシェルを含めます。

1
条件正規表現エラー
string=123456 if [ $string == 123456 ]; then echo 123 fi これは正常に機能しますが、==を=〜に変更すると、このエラーが発生します。 ./test: line 3: [: =~: binary operator expected

4
複数の引数を取るスクリプトを作成するにはどうすればよいですか?
これは非常にシンプルなスクリプトです #!/usr/local/bin/bash set -e if [ "$#" -lt 1 ] then echo "Please insert at least one argument" exit else echo -e "\c" fi if [ -h "$1" ] then echo "$1 is a symbolic link" else echo "$1 in not a symbolic link" fi 〜 私の質問は、複数の引数を認識するためにスクリプトを変更する方法ですか?4つのファイルがあり、スクリプトに戻りたい $1 is a …

2
特定のファイルより古いファイルを削除する
特定のファイルより古いすべてのファイルをフォルダーから削除する必要があります。 CentOS 7でのbashの実行。 これには解決策がありますが、もっとエレガントな方法があるはずです: reference_file=/my/reference/file get_modify_time() { stat $1 | grep -Po "Modify: \K[0-9- :]*" } pit=$(get_modify_time $reference_file) for f in /folder/0000* ; do [[ "$pit" > "$(get_modify_time $f)" ]] && rm $f ; done

6
シェルスクリプトでファイルを待つにはどうすればよいですか?
/tmp呼び出されたディレクトリにファイルが表示されるのを待つシェルスクリプトを作成しようとしていますが、sleep.txtそれが見つかるとプログラムは停止します。 。ここで、テストコマンドを使用することを想定しています。だから、のようなもの (if [ -f "/tmp/sleep.txt" ]; then stop else sleep.) シェルスクリプトを書くのは初めてなので、どんな助けでも大歓迎です!

4
vim:+ xビットでファイルを作成
+x作成中にスクリプトにビットを設定する方法はありますか? たとえば、私は実行します: vim -some_option_to_make_file_executable script.sh 保存した後、追加の移動なしでファイルを実行できます。 追伸 私は実行することができますchmodからvim、あるいはコンソール自体から、これは少し厄介な、原因があるvimファイルをリロードすることを示唆しています。また、chmod毎回コマンドを入力するのは面倒です。pps。ファイル拡張子に応じて作成するのは素晴らしいことです(実行可能ファイルは必要ありません.txt:-))


4
bash globを文字列変数にする方法は?
システム情報 OS:OS X bash:GNU bash、バージョン3.2.57(1)-release(x86_64-apple-darwin16) バックグラウンド タイムマシンで、すべてのgit / nodejsプロジェクトからディレクトリとファイルのセットを除外する必要があります。私のプロジェクトディレクトリはしている~/code/private/と~/code/public/私はやってループのbashを使用しようとしているのでtmutil。 問題 短縮版 計算された文字列変数を持っている場合k、forループの前または直前にどのようにグロブするのですか? i='~/code/public/*' j='*.launch' k=$i/$j # $k='~/code/public/*/*.launch' for i in $k # I need $k to glob here do echo $i done 以下の長いバージョンでは、が表示されますk=$i/$j。そのため、forループで文字列をハードコーディングできません。 ロングバージョン #!/bin/bash exclude=' *.launch .classpath .sass-cache Thumbs.db bower_components build connect.lock coverage dist e2e/*.js e2e/*.map libpeerconnection.log node_modules npm-debug.log …

4
2つのバックグラウンドコマンドが与えられた場合、どちらかが終了したときに残りのコマンドを終了します
2つのサーバーを起動する単純なbashスクリプトがあります。 #!/bin/bash (cd ./frontend && gulp serve) & (cd ./backend && gulp serve --verbose) 2番目のコマンドが終了すると、最初のコマンドが実行を継続しているようです。 どちらかのコマンドが終了した場合、もう一方が終了するように、これをどのように変更できますか? バックグラウンドプロセスのエラーレベルをチェックする必要はなく、終了したかどうかだけを確認してください。

4
stdoutから行末文字を削除しますか?複数の行を単一の行に
次のテキストを出力するスクリプトがあります。これは、Netopia 2210-02 ADSL2モデムからの出力です。 ADSL Line State: Up ADSL Startup Attempts: 1 ADSL Modulation: DMT ADSL Data Path: Fast Datapump Version: DSP 7.2.3.0, HAL 7.2.1.0 SNR Margin: 8.20 9.00 dB Line Attenuation: 57.50 31.00 dB Output Power: 17.09 12.34 dBm Errored Seconds: 0 0 Loss of Signal: 0 476 Loss of …

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 …

1
curlを使用してFTP経由で複数のファイルをアップロードする
curlを使用してFTP経由で現在のフォルダー内のすべてのテキストファイルをサーバーの場所にアップロードしようとしています。私は次の行を試しました: curl -T "{file1.txt, file2.txt}" ftp://XXX --user YYY ここで、XXXはサーバーのIPアドレスで、YYYはユーザー名とパスワードです。 file1.txtをサーバーに正常に転送できますが、2番目のファイルについて「Ca n't open 'file_name'!」というメッセージが表示されます。 ファイル名を入れ替えたところ、file1.txtではなくfile2.txtで機能しました。私は構文が間違っているようですが、これはマニュアルに書かれていることですか? また、理想的には次のようなことができるでしょう: curl -T *.txt ftp://XXX --user YYY なぜなら、現在のフォルダー内のtxtファイルの名前や転送するファイルの数が常にわからないからです。 の出力をls *.txt配列に収集して、curlで必要な複数ファイル形式に入れるbashスクリプトを作成する必要があるかもしれないと私は考えています。 私は以前にbashスクリプトを作成したことがありません-これはこれを実現する最も簡単な方法ですか?
14 shell-script  ftp  curl 

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