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

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

3
フォルダー名がこのようになったのはなぜですか。スクリプトを使用してこれを修正するにはどうすればよいですか?
他の場所に答えがある場合は申し訳ありませんが、問題を検索する方法がわかりません。 Redhat Linux HPCサーバーでいくつかのシミュレーションを実行していましたが、フォルダー構造を処理して出力を保存するためのコードには不幸なバグがありました。フォルダーを作成するための私のmatlabコードは次のとおりです。 folder = [sp.saveLocation, 'run_', sp.run_number, '/']; どこsp.run_numberが整数でした。文字列に変換するのを忘れていましたが、何らかの理由でmkdir(folder);(matlabで)実行は成功しました。実際、シミュレーションは問題なく実行され、データは一致するディレクトリに保存されました。 今、フォルダ構造がクエリ/印刷されると、次の状況が発生します: タブのオートコンプリートを試みると: run_ run_^A/ run_^B/ run_^C/ run_^D/ run_^E/ run_^F/ run_^G/ run_^H/ run_^I/ 私が使うときls:run_ run_? run_? run_? run_? run_? run_? run_? run_? run_? run_?。 私はrsyncを使ってどこでもMy Macに転送する場合--progress:オプションショーrun_\#003/で整数を一致数(私は仮定)となどをsp.run_number10日の実行があるので、3桁にパッド入りrun_\#010/ ファインダーでフォルダーを表示すると、 run_ run_ run_ run_ run_ run_ run_ run_ run_ run_? この質問を見て、ls | LC_ALL=C …

6
Bourneシェルがディストリビューションで利用できない場合、hashbangで/ bin / shを使用するのは正しいですか?
一般に、シェルスクリプトには、スクリプトファイルの最初の行に次のコメントが含まれています#!/bin/sh。私が行った研究によれば、これは「ハッシュバン」と呼ばれ、従来のコメントです。このコメントは、このファイルがディレクトリ下のBourne Shellによって実行されることをUnixに通知します/bin。 私の質問はその点から始まります。今までこのようなコメントを見たことはありません#!/bin/bash。いつも#!/bin/shです。ただし、UbuntuディストリビューションにはBourne Shellプログラムがありません。Bourne Again Shell(bash)があります。 その点で、#!/bin/shUbuntuディストリビューションで書かれたシェルスクリプトにコメントを入れるのは正しいですか?

3
頭が余分なキャラクターを食べる
次のシェルコマンドは、入力ストリームの奇数行のみを出力するものと想定されていました。 echo -e "aaa\nbbb\nccc\nddd\n" | (while true; do head -n 1; head -n 1 >/dev/null; done) ただし、代わりに最初の行を出力しますaaa。 -c(--bytes)オプションを使用した場合、同じことは起こりません。 echo 12345678901234567890 | (while true; do head -c 5; head -c 5 >/dev/null; done) このコマンド1234512345は期待どおりに出力します。ただし、これはユーティリティのcoreutils実装でのみ機能しheadます。busyboxのの出力がちょうどあるので、実装はまだ、余分な文字を食べます12345。 この特定の実装方法は、最適化のために行われていると思います。行の終わりがわからないため、読む必要がある文字数がわかりません。入力ストリームから余分な文字を消費しない唯一の方法は、バイト単位でストリームを読み取ることです。ただし、一度に1バイトずつストリームから読み取るのは遅い場合があります。したがってhead、入力ストリームを十分な大きさのバッファに読み込んでから、そのバッファ内の行をカウントすると思います。 --bytesオプションが使用される場合にも同じことは言えません。この場合、読み取る必要があるバイト数がわかります。したがって、このバイト数を正確に読み取ることができますが、それ以上はできません。corelibsの実装は、この機会を使用しますが、busyboxのの 1にはない、それはまだバッファに必要以上のバイトを読み取ります。おそらく実装を簡素化するために行われます。 質問です。headユーティリティが入力ストリームから要求されたより多くの文字を消費することは正しいですか?Unixユーティリティには何らかの標準がありますか?そして、もしあれば、この動作を指定しますか? PS を押しCtrl+Cて上記のコマンドを停止する必要があります。Unixユーティリティは、以降の読み取りで失敗しませんEOF。押したくない場合は、より複雑なコマンドを使用できます。 echo 12345678901234567890 | (while true; do head -c 5; head -c …

8
配列要素がすべてbashで等しいかどうかをテストするにはどうすればよいですか?
次の配列は、各Linuxマシンのディスク数を表しています 各単一アレイには、Linuxマシン上のディスクの数が含まれます。 echo ${ARRAY_DISK_Quantity[*]} 4 4 4 4 2 4 4 4 すべての配列の値が等しいことを識別する簡単な方法は何ですか? 良い状態: 4 4 4 4 4 4 4 4 悪い状態: 4 4 4 4 4 4 2 4 悪い状態: 6 6 6 6 6 6 6 6 6 6 2 6 2
15 bash  shell-script  awk  array 


1
対話型シェルは非対話型になりますか?
対話型シェルは非対話型になりますか? 注:「対話型と非対話型の違いは何ですか?」という基本的な質問について多くの研究を行ってきましたが、研究の結果、この質問をすることになりました。 この質問には、回答するために「インタラクティブ」にどのタイプの定義を使用するかが重要であるため、部分的に長い前文があります。定義は、特定のセットの任意のラベルです。さまざまなプロパティを説明できます。または、行動を予測し、目的を理解するために使用できる情報を提供できます。 この最後のタイプは、「アクション定義」または「動的定義」と呼ぶことができ、最も便利です。 ではman 1p sh、対話型シェルの次の定義が提供されています。 If the -i option is present, or if there are no operands and the shell’s standard input and standard error are attached to a terminal, the shell is considered to be interactive. 「-iオプション」の記述と「オペランド」という言葉の使用から、これは実行中のシェルで調べることができる属性ではなく、シェルの呼び出しを指します。 Bashのマニュアルページでは、少し異なる表現をしています。 An interactive shell is one started without non-option arguments …

5
「if」と「then」は実際にプログラムされていますか
私はセミコロンがプログラムを分離するために使用されることを読みました: $ echo 3; ls -la それはを意味するのですかif、thenそしてelseここには別のプログラムがありますか? $ if [ $VARIABLE == abcdef ] ; then echo yes ; else echo no ; fi この質問はセミコロンに関するものではありません。

1
bash-builtinがCPUを100%焼くのを待つ
少なくともGNU bashバージョン4.3.42 x86_64 && GNU bashバージョン4.3.11 x86_64で発生します シグナルによって割り込み可能にするために(SIGUSR1として)sleep & wait $!単純な代わりに使用します。ただし、次のコマンドを実行すると、bashビルトインが奇妙な動作をするようです。sleepsleepwait ターミナル1: cat <( trap 'echo SIGUSR1' SIGUSR1; echo $BASHPID; while :;do sleep 1 & wait $!; echo test; done )& ターミナル2: kill -10 /the pid of the subshell, printed by the previous command/ ターミナル1: ^C (ctrl + C) 次に、CPUを100%燃焼させるサブシェルを取得します。 …


6
シェルスクリプトの終了ステータスに「予約済み」コードを使用する
最近、Advanced Bash-Scripting Guideのこの特別な意味を持つ終了コードのリストに出会いました。彼らはこれらのコードを予約済みとして参照し、以下を推奨しています。 上記の表によると、終了コード1-2、126-165、および255は特別な意味を持っているため、ユーザー指定の終了パラメーターには使用しないでください。 少し前に、次の終了ステータスコードを使用するスクリプトを作成しました。 0-成功 1-間違ったホスト名 2-無効な引数が指定されました 3-ユーザー権限が不十分 スクリプトを作成したとき、特別な終了コードを認識していなかったため、最初のエラー状態で1から開始し、連続するエラータイプごとに終了ステータスを増やしました。 後の段階で、他のスクリプト(ゼロ以外の終了コードをチェックできる)から呼び出せるように、スクリプトを作成しました。私は実際にまだそれをしていません。これまでのところ、インタラクティブシェル(Bash)からスクリプトを実行しただけで、カスタム終了コードを使用すると問題が発生する可能性があるかどうかを疑問に思っていました。Advanced Bash-Scripting Guideの推奨事項はどの程度重要/重要ですか? Bashのドキュメントには裏付けとなるアドバイスが見つかりませんでした。終了ステータスのセクションには、Bashが使用する終了コードがリストされているだけですが、これらのいずれも予約済みではなく、独自のスクリプト/プログラムで使用することを警告するものでもありません。

3
産卵 - コマンドが見つかりません!
Mac OS X 10.9.4を使用しています。ローカルマシンから別のホストにファイルをコピーするスクリプトは次のとおりです。 #!/bin/bash #!/usr/bin/expect echo "I will fail if you give junk values!!" echo " " echo "Enter file name: " read filePath echo " " echo "Where you want to copy?" echo "Enter" echo "1. if Host1" echo "2. if Host2" echo "3. if Host3" read choice …

3
シェルスクリプトのboolean値を表すためのベストプラクティスは何ですか?
私は中にブール値があることを、知っているbashが、私は今まで彼らがどこにも使用され表示されません。 マシンで頻繁に検索される情報のラッパーを作成したいと思います。たとえば、この特定のUSBドライブが挿入/マウントされています。 それを達成するためのベストプラクティスは何でしょうか? 文字列? drive_xyz_available=true 数値(0はtrue、0はfalse)? drive_xyz_available=0 # evaluates to true 機能? drive_xyz_available() { if available_magic; then return 0 else return 1 fi } 私は主に、ラッパーを使用したい他の人に何が期待されるのだろうかと思います。ブール値、変数のようなコマンド、または呼び出す関数を期待しますか? セキュリティの観点からは、2番目のオプションが最も安全だと思いますが、あなたの経験を聞きたいと思います。

3
bashスクリプトで「1 >>」と「2 >>」はどういう意味ですか?
私が理解している>>から、次のbashスクリプトがあります。これはコマンドの出力を上書きではなく既存のファイルに追加するために使用されますが、この場合はどうしますか?このスクリプトは、ある形式から別の形式に変換するためにいくつかのexeファイルを呼び出しています。各ファイルには長年あるため、ファイル名を見て各ファイルをループします。また、このスクリプトを実行すると、「あいまいなリダイレクト」が発生します #!/bin/bash source $HOME/.bashrc jobout=${1} joberr=${2} # Set some paths and prefixes yr_bgn=2000 yr_end=2000 yr=${yr_bgn} pth_data='/mnt/' pth_rst='/mnt/' while [ ${yr} -le ${yr_end} ] do ./executable1 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} ./executable2 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} ./executable3 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} let yr=${yr}+1 …

1
スクリプトからバックグラウンドプロセスを開始し、スクリプトの終了時に管理します
スクリプトからデーモンに似たプロセスを実行および構成したいと思います。 私のシェルはCygwinでエミュレートされたzshであり、デーモンは基本的なFTPサーバーであるSFKです。 ここで重要なのは、スクリプトstartserv.shを次のように作成できることです。 #!/bin/sh read -s -p "Enter Password: " pw user=testuser share=/fshare cmd="sfk ftpserv -user=$user -pw=$pw -usedir $share=$share" $cmd & スクリプトを実行した後startserv.sh、プロンプトを表示せずに停止(終了?)します: CTRL+ Cスクリプトとバックグラウンドジョブプロセスの両方を終了します。 叩くEnterスクリプトは、プロセスがバックグラウンドに残って終わります。 とにかく私はのみを経由して、それを見ることができpsないjobs私は、プロセスを閉じたいとき、そう、私は残忍送信する必要がありkill -9、私は賛成で避けたいのですが何かある信号、 CTRL+をC。 別の方法 は、スクリプト全体をバックグラウンドで実行することです。「Would be」ですがread、スクリプトがとして実行される場合、コマンドはユーザー入力を取得できませんstartserv.sh &。 真のデーモンではなく、一時サーバーが必要なことに注意してください。つまり、スクリプトが終了した後、サーバープロセスをバックグラウンドで実行して、(仮想マシンゲストで)簡単なインタラクティブシェルタスクを実行する必要がありますが、シェルを生き残るためのプロセスが必要です。したがって、nohup適切ではないようです。

8
ディレクトリ内のファイルを拡張子でカウントする
テストの目的で、ディレクトリ内の画像ファイルの数を数え、各画像ファイルの種類をファイル拡張子(jpg = "yes"で分けます。これは、後でアクションを実行する別のスクリプトに役立つためです。各ファイル拡張子で)。JPEGファイルのみに次のようなものを使用できますか? jpg="" count=`ls -1 *.jpg 2>/dev/null | wc -l` if [ $count != 0 ] then echo jpg files found: $count ; jpg="yes" fi ファイル拡張子jpg、png、bmp、rawなどを考慮whileして、これを行うにはサイクルを使用する必要がありますか?

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