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

シェルは、Unixのコマンドラインインターフェイスです。シェルにインタラクティブにコマンドを入力するか、スクリプトを記述してタスクを自動化できます。/ bin / shおよび最も互換性のあるシェル(ash、bash、ksh、zshなど)に適用される質問には、このタグを使用します。エラーのあるシェルスクリプトについては、ここに投稿する前にhttp://shellcheck.netで確認してください。

7
最終更新日に基づいてディレクトリ内のファイルを再帰的にソートします
最終更新日に基づいてディレクトリ内のファイルを再帰的にソートします 私は自分のディレクトリ内の多くのファイルを変更しましたが、それらのファイルが最後に変更された日付で並べ替えることによってそれらのファイルが何であるかを知りたいので、一部の拡張機能を除外します svnディレクトリには、ソートに表示したくない.svnファイルもたくさんあります
11 shell  scripting  find  sort 

3
異なる引数でコマンドを繰り返し実行するにはどうすればよいですか?
私はUbuntuにいます。(改行で区切られた)いくつかの引数をコピーし、xselを使用して次のように出力できます $ xsel arg1 arg2 arg3 arg4 ... ここで、これらの各引数を別のコマンドに使用して、引数の数だけそのコマンドを実行したいと思います。 だから私は試した $ xsel | mycommand "constantArgument" $1 ただし、これmycommandは最初の引数に対してのみ実行されました。すべての引数に対してどのように実行できますか?

6
半非同期パイプ
次のパイプがあると仮定します。 a | b | c | d cまたはで(またはb)の完了を待つにはどうすればshよいbashですか?つまり、スクリプトdはいつでも開始できますが(待機する必要はありません)、からの完全な出力がc正しく機能する必要があります。 ユースケースは、画像を比較するdifftoolためのgitものです。これは呼び出されgit、その入力(a | b | cパート)を処理して、比較の結果(パート)を表示する必要がありますd。呼び出し元は、aおよびに必要な入力を削除しますb。つまり、スクリプトから戻る前に、プロセスc(またはb)を終了する必要があります。一方、dユーザーの入力を待っているので、待つことができません。 結果をc一時ファイルに書き込んだり、FIFOをで使用したりできることはわかっていますbash。(ただし、FIFOが役立つかどうかはわかりません。)一時ファイルなしでこれを実現することは可能shですか? 編集 おそらく、信頼できる方法でc(またはb)プロセスのプロセスIDを見つけることができれば十分でしょう。次に、パイプ全体を非同期で開始し、プロセスIDを待つことができます。の線に沿った何か wait $(a | b | { c & [print PID of c] ; } | d) 編集^ 2 私は解決策を見つけました、コメント(またはより良い解決策)は大歓迎です。
11 bash  shell  pipe  fifo 

1
スクロールスペースを節約するために、bashの古いプロンプト行をクリアします
私の端末のテーマは以前はこんな感じでした しかし、私はプロンプトがあまりにも多くのスペースを無駄にしたと思いました。そして、後で、コマンドを実行するたびにプロンプ​​トをクリーンアップできるというアイデアを得ました。私はbashを使用していましたが、解決策の1つはpreexec_invoke_exec関数を使用することです。 次のコマンドを使用して、最後のプロンプト文字を消去します。 echo -ne "\033[1A\033[K\033[1A\033[K\033[31;1m$ \033[0m" このようにターミナルがとてもきれいになるように しかし今私の問題は、たとえばを使用するときに、1行で複数のコマンドを使用する場合に問題が発生することですfor i in ...。 これが私の.bashrcの関数の完全版です。 preexec () { echo -ne "\033[1A\033[K\033[1A\033[K\033[31;1m$ \033[0m"; echo -n "$1"; echo -ne " \033[37;2m["; echo -n "$2"; echo -ne "]\033[0m\n"; } preexec_invoke_exec () { [ -n "$COMP_LINE" ] && return # do nothing if completing [ "$BASH_COMMAND" …
11 bash  shell  terminal  prompt 

3
flockに複数のコマンドを渡す
flock -x -w 5 ~/counter.txt 'COUNTER=$(cat ~/counter.txt); echo $((COUNTER + 1)) > ~/counter.txt' flock上記の例のように複数のコマンドを渡すにはどうすればよいですか? 私が理解している限り、flock異なるフラグ(-xは排他的、-wはタイムアウト用)、次にファイルをロックし、次にコマンドを実行します。この関数に2つのコマンドを渡す方法がわからない(ロックされたファイルの内容で変数を設定してから、このファイルをインクリメントする)。 ここでの目標は、スクリプトがcounter.txtファイルにアクセスしようとするたびにファイルをロックすることにより、ファイルに多少アトミックな増分を作成することです。

2
プロセス置換を伴う出力指図
これは私が普通に実行するために行うものですgrepし、wcそれを2回スキャンすることなく、ファイルに <file.txt tee >(grep LITERAL) >(wc -l) >/dev/null しかし、これは EXEC LITERAL 32 時々そして 32 EXEC LITERAL またある時には。(からgrepの出力wcは、最初のインスタンスからの出力に先行し、2番目のインスタンスではその逆です。) 一方、リダイレクトとファイル記述子では { { <file.txt tee /dev/fd/3 | grep LITERAL >&4; } 3>&1 | wc -l ;} 4>&1 私はいつも得るようです EXEC LITERAL 32 出力順序が予測可能であることを好みますが、2番目のアプローチで保証されますか?

3
最後だけでなく、すべてのコマンドからの出力をファイルにリダイレクトする
echoを使用してファイルにヘッダーを追加し、コマンドを使用して残りのファイルを作成します。つまり、2つの別々のコマンドを使用します。 リダイレクトを使用して、両方のコマンドの出力をファイルに書き込むにはどうすればよいですか? 私はもう試した echo "header line" | cut -c 1-5 input_file > output_file echo "header line"; cut -c 1-5 input_file > output_file これは、cutコマンドからの出力のみをリダイレクトします。 次のコマンドは機能しますが、不便に感じられます。 echo "header line" > output_file; cut -c 1-5 input_file >> output_file 私の問題を解決する賢い方法は何ですか?

4
複数のプログラムによって印刷された行を安全に「組み合わせる」方法は?
複数のプログラムを並行して実行し、それらの出力を1つのパイプに結合したいとします。 sh -c ' (echo qqq; echo qqq2; echo qqq3)& (echo www; echo www2; echo www3)& (echo eee; echo eee2; echo eee3)& wait; wait; wait' このシェルアプローチは、この単純なケースではうまく機能しますが、プログラムが次のように、バッファされた方法でより多くの長い行を出力する場合は失敗すると予想されます(構成されています)。 qqq qqwww q2 qqq3www2 wwweee3 eee2 eee3 私が使用するように示唆された解決策の1つはtail -f次のとおりです: tail -n +0 -q -f <(echo qqq; echo qqq2; echo qqq3) <(echo www; echo www2; …

2
シェル機能の名前は何ですか `>(tee copyError.txt>&2)`?
stdoutとstderrをログファイルに記録する必要がありますが、画面に表示されるのはエラーメッセージだけです。私はこれを行うことができます: cp -rpv a/* b 1> copyLog.txt 2> >(tee copyError.txt >&2) ウェブのどこかで見つけました。 これがどう>(tee copyError.txt >&2)呼ばれるのか知りたいだけ?山かっこやかっこなどの文字は無視されるため、グーグルできません。
11 bash  shell 

2
「kill -p」は本当に機能しますか?
そのmanページにkillは以下のように書かれています あらすじ kill [ -s signal | -p ] [ -a ] [ -- ] pid ... kill -l [ signal ] -p Specify that kill should only print the process id (pid) of the named processes, and not send any signals. しかし、RHとRHELの両方で何度も試したので、コマンドが機能しkill -s SIGHUP |-p 123ないことがあり、エラーが常に報告されます bash:-p:コマンドが見つかりません 私は間違いをしましたか?

5
プロセスの終了時または強制終了時にSMS /テキストメッセージ通知を取得することは可能ですか?
サーバープロセスが完了したときに電子メールを送信するスクリプトがあります。 ただし、仕事が終了したかどうかを確認するためだけにメールをチェックすることはあまりありません。したがって、SMSメッセージを取得したいと思います。 私の質問はこれと似ていますが、SMSをすべての「電子メール」と交換するだけです。プロセスが終了したときに通知電子メールを送信できるプログラムはありますか? ジョブが終了した(または途中で終了した)ときにSMSを送信できるようにするための回避策、アプリ、スクリプトなどは何でも考えられますか?

2
引用符付きと引用符なしの文字列展開
for i in $(xrandr); do echo "$i" ; done for i in "$(xrandr)"; do echo "$i"; done for i in "$(xrandr)"; do echo $i; done 1が2と異なる理由を理解していますが、3が2とは異なる出力を提供するのはなぜですか?出力についても説明してください。引用符は改行でどのように機能しますか?

10
プロセスがバックグラウンドで既に実行されているかどうかを確認する方法(およびそれに基づいて再実行をスキップする方法)をbashしますか?
プロセスがまだ(バックグラウンドで)実行されていない場合に、特定のコマンドのみを実行するbashコマンドラインを作成できますか? コマンドがすでに実行されているかどうかを確認するにはどうすればよいですか? (&&そのため、間に次のコマンドを追加して、最初のコマンドがtrueの場合にのみ次のコマンドが実行されるようにすることができます)。 *:テスト、決定、発見、発見
11 bash  shell  process 

2
Xウィンドウが現れる/消えるのを(正気に)待つ
シェルスクリプト内で、タイトルに文字列が含まれているウィンドウが表示されるのを待ち、何らかのアクションを実行してから、ウィンドウが消えるのを待ち、その他のアクションを実行する必要があります。 昨日まで、私はこの単純なコードを持っていました。この問題は、スクリプトの実行中にディスクを省電力状態にすることができず、長時間続く可能性があることです。 while :; do until wmctrl -l | grep -q "$string"; do # until sleep 0.5 done : do action 1 while wmctrl -l | grep -q "$string"; do # while sleep 0.5 done : do action 2 done 上記のコードがめちゃくちゃディスクを起こしていると判断したxdotoolので、いくつかのコマンドラインツールのドキュメントを読み、ウィンドウが表示されるのを待ちxprop、ウィンドウがいつ消えたかを判断することにしました。 while :; do # we use `until' because sometimes …
11 bash  shell  python  window 

2
実行する前にサブシェルを展開しますか?
私はサブシェルを使用してコマンドを実行することが多く、何かを実行する前にサブシェルを展開したい場合があります。このようにして、実行していることを確認し、起こりそうなことを編集することもできます。 たとえば、次のコマンドラインを実行する前に展開して、サブシェルの結果を編集するにはどうすればよいですか? 例えば $ find -name "test.txt" /tmp/test.txt $ mv $(!!) /tmp/new.txt コマンドを実行する前に、次のようにサブシェルを展開したいと思います。 $ mv /tmp/test.txt /tmp/new.txt これを行う方法はありますか?

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