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

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

5
非インタラクティブスクリプトのsudo
3つの関数を実行するスクリプトがありますA && B && C。 機能はB一方で、スーパーユーザーとして実行する必要がありますAし、Cしないでください。 私はいくつかの解決策を持っていますが、どちらも満足していません: スクリプト全体をsudo: sudo 'A && B && C' それは実行に悪いアイデアのように思えるAし、Cそれが必要ない場合は、スーパーユーザーとして スクリプトをインタラクティブにします。 A && sudo B && C パスワードを入力する必要があるかもしれませんが、各関数には時間がかかる可能性があるため、スクリプトを非対話形式にして、スクリプトが私を待機しないようにしたいと思います。まあ、それがそもそもスクリプトであるため、実行を監視する必要はありません。 愚かな解決策: sudo : && A && sudo -n B && C 最初に何sudoもしないことを最初に実行するのはばかげているように思われます。また、Aがを超えることはないので、指を交差させなければなりません$sudo_timeout。 仮説的な解決策(存在することを教えてください): sudo --store-cred 'A && sudo --use-cred-from-parent-sudo B && C' それは最初に私のパスワードを要求し、必要なときだけその資格情報を使用します。 このすべてについてあなたの意見は何ですか?私はそれがかなり一般的な問題だと思うので、その問題の解決策がないことに非常に驚きます(どうですかmake all && sudo …

1
右矢印キーが押されたことを検出するbashscript
キーコードが右矢印キーでない場合でも、これが常にtrueとして検出されるのはなぜですか? stty_state=`stty -g` stty raw; stty -echo keycode=`dd bs=1 count=1 2>/dev/null` stty "$stty_state" echo $keycode if [ "$keycode"=39 ]; then echo "Right Arrow Key Pressed!" fi

8
行の最初または途中のパターンのGrep
まず、この問題は思ったよりも無害だと思います。 私が必要なこと:PATH環境変数内のフォルダーを確認します。それは最初か後のどこかにあります。そのフォルダが存在することを確認するだけです。 私の問題の例-使用しましょう/opt/gnome。 シナリオ1:フォルダーがPATHの先頭にない # echo "$PATH" /sbin:/usr/sbin:/opt/gnome:/var/opt/gnome # echo "$PATH" | grep ":/opt/gnome" /sbin:/usr/sbin:/opt/gnome:/var/opt/gnome キャッチしないように、grepは十分に具体的である必要があることに注意してください/var/opt/gnome。したがって、結腸。 シナリオ2:フォルダーがPATHの先頭にあります。 # echo "$PATH" /opt/gnome:/sbin:/usr/sbin:/var/opt/gnome # echo "$PATH" | grep "^/opt/gnome" /opt/gnome:/sbin:/usr/sbin:/var/opt/gnome これは私の問題です-このフォルダーでコロンまたは行頭を検索する必要があります。私がやりたいのは、次の2つのブラケット式の1つです。 # echo $PATH | grep "[^:]/opt/gnome" # echo $PATH | grep "[:^]/opt/gnome" しかし[^と[:、自分の意味を持っています。したがって、上記の2つのコマンドは機能しません。 1つのコマンドでこれらの2つのシナリオをgrepできる方法はありますか?

3
スクリプト出力の自己リダイレクトに相当するダッシュ
Bashでは、現在実行中のスクリプトの将来のすべての stdout出力をリダイレクトできます。たとえば、このスクリプトでは、 exec > >(logger -t my-awesome-script) echo 1 echo 2 echo 3 これはsyslogで終わります: Oct 26 01:03:16 mybox my-awesome-script[72754]: 1 Oct 26 01:03:16 mybox my-awesome-script[72754]: 2 Oct 26 01:03:16 mybox my-awesome-script[72754]: 3 しかし、これはBash固有であり、リダイレクトを備えたネイキッドexecはDashでは機能しないようです。 Syntax error: redirection unexpected Dashで、またはおそらく両方のシェルで機能させるにはどうすればよいですか?

4
予期しないEOFおよび構文エラー
現在、3度目のシェルスクリプトを書いていて、問題が発生しました。これはこれまでの私のスクリプトです: #!/bin/bash echo "choose one of the following options : \ 1) display all current users \ 2) list all files \ 3) show calendar \ 4) exit script" while read do case in 1) who;; 2) ls -a;; 3) cal;; 4) exit;; esac done スクリプトを実行しようとすると、次のようになります。 line2 : unexpected EOF …

1
bashスクリプトでのマルチスレッド/フォーク
次の形式のbashスクリプトを作成しました。 #!/bin/bash start=$(date +%s) inFile="input.txt" outFile="output.csv" rm -f $inFile $outFile while read line do -- Block of Commands done < "$inFile" end=$(date +%s) runtime=$((end-start)) echo "Program has finished execution in $runtime seconds." whileループから読み込みます$inFile、ライン上でいくつかのアクティビティを実行して、結果をダンプ$outFile。 以下のよう$inFile3500+ラインの長さで、スクリプトが完全に実行するための6-7時間かかります。この時間を最小限に抑えるために、このスクリプトではマルチスレッドまたはフォークを使用することを計画しています。8つの子プロセスを作成すると、からの8行$inFileが同時に処理されます。 これはどのように行うことができますか?


4
パイプからユーザー入力を読み取る方法は?
confirmation.sh次の内容の名前のファイルがあるとします。 #!/bin/bash echo -n "Are you sure [Y/n]? " read line case "$line" in n|N) echo "smth" ;; y|Y) echo "smth" ;; esac このスクリプトを次のように実行したいと思います。 cat confirmation.sh | sh 私が見るAre you sure [Y/n]?と、スクリプトが中断されました。どうしたの?


2
インタラクティブにビデオファイルを連結する
複数のMP4ビデオファイルをインタラクティブに1つのファイルに連結(結合)する方法 コマンドラインから2つのファイルに対してこれを行うプログラムはたくさんあります。例えば: ffmpeg avconv MP4Box しかし、これをインタラクティブに行うためのソリューションが必要になることがよくあります。

2
「履歴」はbashスクリプト内で実行すると機能しなくなります
特定の文字列を見つけるためにbashの履歴をgrepする簡単なスクリプトを書いています。コマンドラインで、次のように実行できます。これは正常に機能します。 history | grep git しかし、上記と同じコマンドでbashスクリプトを作成すると、突然history何も返されません。 #!/bin/bash history | grep git 最初の行を削除する#!/bin/bashと、スクリプトが再び動作します。ここで何が起きてるの?historybashスクリプト内でどのように使用できますか?

3
アトミック更新のためにファイルの排他的な読み取り/書き込みロックを取得する
カウンターとして使用するファイルが欲しいのですが。ユーザーAがこの番号を書き込んでインクリメントし、ユーザーBはファイルの読み取りを要求します。ユーザーAがこのファイルをロックして、ユーザーAの書き込みが完了するまで誰もファイルを読み書きできないようにすることは可能ですか? 調査しましたflockが、期待どおりに機能するようには見えません。 flock -x -w 5 /dev/shm/counter.txt echo "4" > /dev/shm/counter.txt && sleep 5 このアトミックのようなインクリメントファイルを取得するためのより適切な方法があるとしたら、それも聞いてみたいと思います。 私の目標は: LOCK counter.txt; write to counter.txt; 同時に Read counter.txt; realize it's locked so wait until that lock is finished.

5
シェルスクリプトで2番目のファイルを最初の列と比較し、2番目のファイルから重複行を削除する
例を挙げて質問します。2つのファイルがあります。 ファイル#1: 118D FC300_R5_TP FX.B 32775 2112 6 2038 6 2112 0 118E FC300_R5_TP FX.B 32775 2136 7 2065 6 2136 0 118F FC300_R5_TP FX.B 32775 2124 6 2064 6 2124 0 1190 FC300_R5_TP FX.B 819210 814632 99 814609 99 814632 0 1191 FC300_R5_TP FX.B 819210 104100 13 103714 13 …

5
一意の識別子で2つのファイルを結合する
約12900エントリと4400エントリの2つのファイルがあり、それらを結合したいと思います。ファイルには、世界中のすべての陸上気象観測所の位置情報が含まれています。最大のファイルは隔週で更新され、小さいファイルは年に1回程度更新されます。元のファイルはここにあります(http://www.wmo.int/pages/prog/www/ois/volume-a/vola-home.htmおよび http://weather.rap.ucar.edu/surface/ station.txt)。私が持っているファイルは、いくつかのawk、sed、およびbashスクリプトが混在しているため、すでに操作されています。このファイルを使用して、Unidataから無料で入手できるGEMPAKパッケージを使用してデータを視覚化します。最大のファイルはGEMPAKで動作しますが、完全な機能では動作しません。これには結合が必要です。 ファイル1には、気象観測ステーションの位置情報が含まれています。最初の6桁は、ステーションの一意の識別子です。さまざまなパラメーター(ステーション番号、ステーション名、国コード、緯度経度、ステーション標高)は、ライン内の位置によってのみ定義されます(タブはありません)。 060090 AKRABERG FYR DN 6138 -666 101 060100 VAGA FLOGHAVN DN 6205 -728 88 060110 TORSHAVN DN 6201 -675 55 060120 KIRKJA DN 6231 -631 55 060130 KLAKSVIK HELIPORT DN 6221 -656 75 060160 HORNS REV A DN 5550 786 21 060170 HORNS REV B DN …


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