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

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


3
「トラップ…INT TERM EXIT」は本当に必要ですか?
クリーンアップタスクにtrap使用する多くの例trap ... INT TERM EXIT。しかし、3つのsigspecをすべてリストすることは本当に必要ですか? マニュアルによると: SIGNAL_SPECがEXIT(0)の場合、シェルの終了時にARGが実行されます。 スクリプトが正常に終了したか、または受信したSIGINTか終了したかに関係なく適用されると信じていますSIGTERM。また、実験は私の信念を確認します: $ cat ./trap-exit #!/bin/bash trap 'echo TRAP' EXIT sleep 3 $ ./trap-exit & sleep 1; kill -INT %1 [1] 759 TRAP [1]+ Interrupt ./trap-exit $ ./trap-exit & sleep 1; kill -TERM %1 [1] 773 TRAP [1]+ Terminated ./trap-exit では、なぜそんなに多くの例がすべてをリストしているのINT TERM EXITでしょうか?または、私は何かをEXIT見逃しましたか?足裏が見逃す場合がありますか?
63 bash  shell  signals  trap 


5
親プロセスに送信されたときにSIGINTが子プロセスに伝播されないのはなぜですか?
シェルプロセス(例sh)とその子プロセス(例cat)が与えられた場合、シェルのプロセスIDを使用してCtrl+ の動作をどのようにシミュレートできCますか? これは私が試したものです: 実行shしてからcat: [user@host ~]$ sh sh-4.3$ cat test test 送信SIGINTにcat別の端末から: [user@host ~]$ kill -SIGINT $PID_OF_CAT cat 信号を受信して​​終了しました(予想どおり)。 親プロセスにシグナルを送信しても機能しないようです。親プロセスに送信されたcatときに信号が伝播されないのはなぜshですか? これは動作しません: [user@host ~]$ kill -SIGINT $PID_OF_SH
62 shell  process  signals 

3
アーカイブをダウンロードして、アーカイブをディスクに保存せずに抽出する方法は?
特定のディレクトリにあるアーカイブをダウンロードして抽出したいのですが。ここに私がこれまでやってきた方法があります: wget http://downloads.mysql.com/source/dbt2-0.37.50.3.tar.gz tar zxf dbt2-0.37.50.3.tar.gz mv dbt2-0.37.50.3 dbt2 代わりに、ディスクに書き込まずにアーカイブをその場でダウンロードして抽出したいと思いますtar.gz。wgetto の出力をパイピングし、ターゲットtarを与えることでこれが可能だと思いますtarが、実際には、ピースをどのように組み合わせるかわかりません。
62 shell  pipe  tar  wget 

5
ネストのインデントと一致するようにヒアドキュメントをインデントできません
スクリプティングに「最初の世界の問題」がある場合、これがそれです。 更新するスクリプトに次のコードがあります。 if [ $diffLines -eq 1 ]; then dateLastChanged=$(stat --format '%y' /.bbdata | awk '{print $1" "$2}' | sed 's/\.[0-9]*//g') mailx -r "Systems and Operations <sysadmin@[redacted].edu>" -s "Warning Stale BB Data" jadavis6@[redacted].edu <<EOI Last Change: $dateLastChanged This is an automated warning of stale data for the UNC-G Blackboard Snapshot …

6
bashが色を印刷できるかどうかを確認する方法
私のプログラムが色を使用して端末出力を出力できるかどうかを確認する方法があるかどうかを知りたいです。 のようなコマンドを実行lessし、色を使用して出力するプログラムからの出力を見ると、出力は次のように間違って表示されます。 [ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m] ありがとう
62 shell  terminal  colors 

1
nullglobがデフォルトではないのはなぜですか?
ほとんどのシェルでnullglobはデフォルトではありません。つまり、たとえば、このコマンドを実行すると ls * 空のディレクトリでは、*globを展開して*、引数の空のリストではなく、リテラルにします。*空のディレクトリで空の引数リストを返すように、その動作を変更する方法があります。これはより直感的に見えるでしょう。 だから、nullglobデフォルトで無効になっている理由はありますか?もしそうなら、その理由は何ですか?
61 shell  wildcards 


1
/ bin / shを使用して、stderrとstdoutの両方を/ dev / nullにリダイレクトします
私は両方をリダイレクトする方法のすべての種類試してみましたstdoutとstderrすると/dev/null任意の成功なし。私はこの問題を経験したことのないほぼすべてのライフランbashを持っていますが、BSDで私は一度立ち往生してい/bin/shます。 私が試したこと: if ls ./python* 2> /dev/null; then echo found Python fi ...動作します; Pythonが存在しない場合、lsからのエラーメッセージがミュートされます。ただし、python.tgz存在する場合は、次のような行が出力されます。 # ./test.sh ./python-2.7.3p1.tgz 私はもう試した: if ls ./python* &> /dev/null; then echo found Python fi そして if ls ./python* 2>1 > /dev/null; then echo found Python fi そして if ls ./python* > /dev/null; then echo found Python …

1
このコマンドはどのように合法ですか?「> file1 <file2 cat」
file2既に存在すると仮定すると、コマンド &gt; file1 &lt; file2 cat のコンテンツをにコピーしているfile2ようfile1です。 しかし、この構造は理解できません。 「何も」がに向けられていることを理解していますfile1(コンテンツの作成または消去)。次に、のコンテンツfile2はに向けられていfile1ます。 なぜcat後file2ですか?cat file2オペランドが正しい順序になっていないことをどのように知るのですか?

2
ファイルの行をループする方法は?
このファイルがあるとしましょう: hello world hello world このプログラム #!/bin/bash for i in $(cat $1); do echo "tester: $i" done 出力 tester: hello tester: world tester: hello tester: world forただし、空白を無視して各行を個別に繰り返したいと思います。つまり、最後の2行を次のように置き換えます。 tester: hello world 引用符for i in "$(cat $1)";を使用iすると、ファイル全体が一度に割り当てられます。何を変更すればよいですか?

3
「//」で始まるシバン?
次のスクリプトについて混乱しています(hello.go)。 //usr/bin/env go run $0 $@ ; exit package main import "fmt" func main() { fmt.Printf("hello, world\n") } 実行できます。(MacOS X 10.9.5の場合) $ chmod +x hello.go $ ./hello.go hello, world から始まるシバンについて聞いたことがありません//。また、スクリプトの先頭に空白行を挿入しても機能します。このスクリプトが機能するのはなぜですか?



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