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

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

2
コマンドを並行して実行し、コマンドの1つのグループが完了するのを待ってから、次のグループを開始します。
複数のコマンドを含むスクリプトがあります。コマンドをグループ化して一緒に実行するにはどうすればよいですか(コマンドのグループをいくつか作成します。各グループ内で、コマンドは(同時に)実行する必要があります。グループは順次実行され、1つのグループが完了するまで待ってから、次のグループ)... ie #!/bin/bash command #1 command #2 command #3 command #4 command #5 command #6 command #7 command #8 command #9 command #10 どうすれば3つのコマンドごとに実行できますか?私は試した: #!/bin/bash { command #1 command #2 command #3 } & { command #4 command #5 command #6 } & { command #7 command #8 command #9 …

2
チルダを変数の一部として展開するにはどうすればよいですか?
bashプロンプトを開いて次のように入力すると、 $ set -o xtrace $ x='~/someDirectory' + x='~/someDirectory' $ echo $x + echo '~/someDirectory' ~/someDirectory 上記の5行目が表示されることを期待していました+ echo /home/myUsername/someDirectory。これを行う方法はありますか?私の元のBashスクリプトでは、変数xは実際には次のようなループを介して、入力ファイルのデータから入力されています。 while IFS= read line do params=($line) echo ${params[0]} done <"./someInputFile.txt" それでも、のecho '~/someDirectory'代わりに、同じような結果が得られecho /home/myUsername/someDirectoryます。

2
別の関数内で関数を呼び出す方法
サーバーのリソースを監視するために、実際にはシェルスクリプトで作業しています。関数があり、知りたい:メイン関数内で2番目の関数を呼び出すにはどうすればよいですか? 例: funct mainfunct(){ echo "Text to show here" **$secondfunct** } funct secondfunct(){ commands }
12 shell  scripting 


3
sh(bashではなく)が.bashrcで定義された関数について不平を言うのはなぜですか?
ターミナルセッションを開くと、これが表示されます。 sh: `read.json 'の関数定義のインポートエラー sh: `ts-project 'の関数定義のインポートエラー shは次のように見えるため、これらの関数が好きではありません。 read.json(){ :: } そして ts-project(){ :: } 本当の質問は-なぜshこれらのファイルに触れる/解釈するのですか?私はMacOSを使用していて、以前にこれを見たことがあります。それはとても謎です。これらのファイルを読み込むのはbashだけだと思います。 更新:bashとshは普通のことではありません。ターミナルにbashと入力すると、次のようになります。 alex$ bash beginning to load .bashrc finished loading .bashrc bash-3.2$ shターミナルに入力すると、これが得られます: alex$ sh sh: error importing function definition for `read.json' sh: error importing function definition for `ts-project' sh-3.2$

3
コマンド置換を介して別のコマンドの引数を生成するにはどうすればよいですか
次から: シェルコマンド置換での予期しない動作 私は引数の膨大なリストを取ることができるコマンドを持っています、それらのいくつかは合法的にスペースを含むことができます(そしておそらく他のもの) これらの引数を引用符で生成できるスクリプトを書きましたが、出力をコピーして貼り付ける必要があります。 ./somecommand <output on stdout with quoting> ./othercommand some_args <output from above> 私は単にすることでこれを合理化しようとしました ./othercommand $(./somecommand) そして、上記の問題で言及された予期しない動作に遭遇しました。問題はothercommand、いくつかの引数が引用符を必要とし、これを変更できないことを前提として、コマンド置換を使用して引数を確実に生成できるかどうかです。


3
「/ bin / sh」が「/ bin / bash」を指しているときにシェルスクリプトを実行する
私はこの質問で次を読んだ: bashは--posixスイッチをサポートしているため、POSIXに準拠しています。また、shとして呼び出された場合、POSIXを模倣しようとします。 上記の引用は、それ/bin/shがを指すリンクであると仮定してい/bin/bashます。 しかし、「shとして呼び出された」という意味がよくわかりません。 「script.sh」と呼ばれる次のスクリプトがあるとします。 #!/bin/bash echo "Hello World" スクリプトが通常bashモードで実行されるのか、POSIXモードで実行されるのかを、次のそれぞれのケースで教えてください(実行中の端末で次のコマンドを実行したと想定していますbash)。 sh script.sh bash script.sh ./script.sh 「script.sh」と呼ばれる次のスクリプトがあるとしましょう(上記のスクリプトに似ていますが、シバンはありません)。 echo "Hello World" スクリプトが通常bashモードで実行されるのか、POSIXモードで実行されるのかを、次のそれぞれのケースで教えてください(実行中の端末で次のコマンドを実行したと想定していますbash)。 sh script2.sh bash script2.sh ./script2.sh
11 linux  bash  shell 

3
SSHリモートコマンドライン引数はどのように解析されますか
リモートsshコマンドへの引数を二重にエスケープする必要があるという質問と回答を見てきました。私の質問は次のとおりです。正確に、いつ、2番目の解析が行われますか? 次を実行すると: $ ssh otherhost pstree -a -p 次の出力が表示されます。 |-sshd,3736 | `-sshd,1102 | `-sshd,1109 | `-pstree,1112 -a -p リモートコマンド(pstree)の親プロセスはsshdであり、リモートコマンドへのコマンドライン引数を解析するシェルがないように見えるため、二重引用符またはエスケープが必要であるように見えません(しかし、それは間違いなくです)。代わりに最初にそこにsshし、ログインシェルを取得して実行するpstree -a -pと、出力に次のように表示されます。 ├─sshd,3736 │ └─sshd,3733 │ └─sshd,3735 │ └─bash,3737 │ └─pstree,4130 -a -p したがってbash、その場合にコマンドライン解析を実行するシェルがそこにあるのは明らかです。しかし、リモートコマンドを直接使用する場合、シェルがないように見えるので、なぜ二重引用符が必要なのでしょうか。
11 bash  shell  ssh  process  quoting 

4
ヒアドキュメントのJSONコンテンツが解析できないのはなぜですか?
JSONフラグメントがあります。 以下は機能しません。 VALUE=<<PERSON { "type": "account", "customer_id": "1234", "customer_email": "jim@gmail.com" } PERSON echo -n "$VALUE" | python -m json.tool 結果は次のとおりです。 JSONオブジェクトをデコードできませんでした で同じことを行うjq、すなわち echo -n "$VALUE" | jq '.' 出力はありません。 以下についても同じ動作があります。 VALUE=<<PERSON '{ "type": "account", "customer_id": "1234", "customer_email": "jim@gmail.com" }' PERSON echo -n "$VALUE" | python -m json.tool 応答: JSONオブジェクトをデコードできませんでした しかし、次の作品: …


1
シェル変数をファイルの内容に設定するエレガントな方法はありますか?
ファイルにいくつかの構成データがあるとしますconfig。便宜上、このデータをシェル変数にロードしますCONFIG_DATA。 明らかに私はできる: CONFIG_DATA="$(cat config)" しかし、このことはcat私にとっては役に立たないようなものです。これがこれを行う唯一の方法ですか?それとも、よりエレガントな方法がありますか? 回答はPOSIXを優先する必要がありますが、任意のシェルを使用できます。

4
「スリープ」の残り時間を判断する方法は?
私が持っています: sleep 210m && for i in $(seq 1 5); do echo -e '\a'; sleep 0.5; done シンプルで飾り気のないタイマーとして実行され、何かをする必要があるときに通知します。それsleep 210mはPID 25347です。 睡眠の残り時間を把握しようとしています。私が思いついた中で最高の、元の睡眠量(210分)を入れてみます: $ echo "210 60 * $(ps -o etimes= 25347) - 60 ~ r n [:] P p" | dc 78:11 (説明:最初のビットは、元のスリープの秒数を計算します。$(ps…)ビットは、スリープが開始してからの時間を秒単位で取得し、残りはそれらを減算して、分と秒で表示します。) これは、一般的に便利だと思います。これを行うより良い方法はありますか?または、少なくとも睡眠時間を解析する賢い方法はps -o args?
11 shell  sleep 

1
`-`で` -a`または `-o`演算子を使用しないでください
StéphaneChazelasが書いた: いくつかのルール 常に変数を引用する -aor -o演算子を使用しないでください(いくつかの[コマンドと&&andおよび||shell演算子を使用します) 作る[POSIXシェルで信頼性の高いです。 なぜ「-aまたは-o演算子を使用しない」のですか? 「いくつかの[コマンドと&&andおよび||shell演算子を使用する」にはどうすればよいですか?
11 bash  shell  test 

2
サブシェルは子シェルと同じです
この2つの名前があります。サブシェルと子シェルです。 はい、子プロセスは次のいずれかによって開始されます: sh -c 'echo "Hello"' ( echo "hello" ) echo "$(echo "hello") echo "hello" | cat すべて同等で、同じ名前を共有していますか?すべて同じプロパティを共有していますか? POSIXには次の定義があります。 シェル実行環境は...で構成されています。 しかし、上記のリンクの最後の段落にはこれがあります: サブシェル環境は、無視されないシグナルトラップがデフォルトのアクションに設定されることを除いて、シェル環境の複製として作成されます。 そして特に: コマンド置換、括弧でグループ化されたコマンド、および非同期リストは、サブシェル環境で実行されます。さらに、マルチコマンドパイプラインの各コマンドはサブシェル環境にあります。.... sh -c 'echo "Hello"'そこに含まれていない、それもサブシェルと呼ばれるべき?

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