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

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

3
[“ $ {1:0:1}” = '-']の意味
MySQLプロセスを起動する次のスクリプトがあります。 if [ "${1:0:1}" = '-' ]; then set -- mysqld_safe "$@" fi if [ "$1" = 'mysqld_safe' ]; then DATADIR="/var/lib/mysql" ... このコンテキストで1:0:1はどういう意味ですか?
18 linux  bash  shell 

2
JavaScriptの「split()」のようなものがシェルにありますか?
split()JavaScriptで文字列を配列に分割するのは非常に簡単です。 シェルスクリプトはどうですか? 私はこれをやりたいと言います: $ script.sh var1_var2_var3 ユーザーがそのような文字列var1_var2_var3をscript.shに渡すと、スクリプト内で文字列を次のような配列に変換します array=( var1 var2 var3 ) for name in ${array[@]}; do # some code done

4
#!/ bin / shまたは#!/ bin / bashを使用して、Ubuntu-OSXの互換性と使いやすさ、POSIXを実現します。
いずれかのスクリプトを最初の行として使用して、目的のシェルを呼び出すことができることを知っています。 う#!/bin/sh、すべてのUNIXシステムとの互換性が絶対条件である場合にはお勧めできますか? 私の場合、私が気にしているOSはUbuntu(Debian)とOSXだけです。それを考えると、#!/bin/bash両方のシステムで使用できると確信できますか? これにより、コマンドの構文がより近代的で明確なスクリプトを使用しやすくなりますか?#!/bin/sh使用はPOSIXの使用にも関連していますか?
18 bash  shell  ubuntu  osx  posix 

2
サブシェルで変数が表示されるのはなぜですか?
Learning Bash Bookでは、サブシェルは環境変数とファイル記述子などのみを継承し、エクスポートされない変数は継承しないと述べています。 $ var=15 $ (echo $var) 15 $ ./file # this file include the same command echo $var $ 私が知っているようにシェルがために2つのサブシェルが作成されます()とのために./file、なぜに()ケースを識別サブシェルんvarそれはエクスポートされませんが、変数をし、中./fileケース、それはそれを識別しませんでしたか? # Strace for () clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f24558b1a10) = 25617 # Strace for ./file clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f24558b1a10) = 25631 私が使用しようとstrace、この問題が発生したかを把握すると、驚くほど私はbashがクローンシステムコールのために同じ引数を使用します見つけ、中にフォークプロセスの両方、この手段はそう()と./file、親の同じプロセスアドレス空間を持つ必要があり、なぜこの()場合、変数はサブシェルに表示され./file、同じ引数はクローンシステムコールに基づいていますが、同じことはケースに起こりませんか?
18 bash  shell  subshell 


2
ポータブルスクリプトを記述することが重要なのはいつですか?
私が書くコードのほとんどはPHPにあります。最近、シェルスクリプトの学習を始めました。私が出会ったほとんどのリソースとチュートリアルは、Bashに固有のものです。バシズムについて警告する人もいれば、警告しない人もいます。私はこことStack Overflowについてたくさん読んでいます。 答えがbashismsを使用するときは常に、誰かが次のようにコメントすることは避けられません。 <bashismをここに挿入>は使用しないでください。ポータブルではありません。 これは、質問にがタグ付けされている場合でも発生しbashます。私にとって、それはPHP 4で使用できないため、PHP 5の新しいコードを使用すべきではないことをPHPプログラマーに伝えるようなものです。 Windowsで。 PHPで作成する場合、最小要件を選択し、前方互換コードを作成します。下位互換性について心配する必要はありません。 #!/bin/bashシバンとして使用する場合、なぜバシズムを使用してはいけないのですか?私は、一部の人々がちょうどそれのためにバシズムをバッシングすること(意図されたしゃれ)を好むという印象を受け始めています。 多くの場合bash、shellbashは多くのシステムでデフォルトのシェルであるという事実により、人々は頻繁に使用し、交換可能です。したがって、コードがバシズムを使用していることを警告するコメントを追加することは理解できますが、それらを使用することは間違っているという意味を理解していません。 明らかに、私が個人的に使用するためだけにスクリプトを書いている場合、私は好きな言語でそれを書くことができます。しかし、私が書いたコードの一部は他の人にとっても役立つと思いたいです。 投稿する前に質問の答えを探してみました。移植性をテストする方法に関する多くの情報を見つけましたが、そうすることが重要な場合については何も見つかりませんでした。 それで、いつ移植可能なスクリプトを書くことが重要ですか? 例えば、 どんな種類のスクリプトを可能な限り移植可能にするべきですか? Bashがインストールされていないシステムはどのくらい一般的ですか? システムにBashがインストールされている場合、GNUバージョンのfindおよびその他のユーティリティもありますか?

2
シェル変数の展開とグロブの効果とその上での分割
この投稿には実際には2つの個別の質問が含まれていますが、それらをグループ化することで、より多くのコンテキストが得られると思います。私は変数の引用符についてこの質問をしましたが、そもそも変数の展開が何を意味するのかよくわかりません。だから私の最初の質問は: unix / linux speakの変数展開とは何ですか? 私の質問の2番目の部分は、次の用語に関連しています。 glob スプリット 上記は何を意味し、変数展開にどのように影響しますか?元の質問への回答には、次のことが記載されています。 (リストコンテキストで)引用符がないことは、split + glob演算子と考えてください。 echo $ testがecho glob(split( "$ test"))のように。 私は直接の概念取り組む任意の答えを見つけることができませんでしたグロブや分割をではなく、直接、このように他の質問に答えるには、それらの用語を使用しています最近のもの。

2
アプリケーションを適切に終了せずにターミナルウィンドウを閉じることは有害ですか?
Ubuntu 12.04 LTSを使用して、私の質問は、ターミナルウィンドウでアプリケーションを起動した場合、最初にアプリケーションを適切に終了せずにターミナルウィンドウを閉じるだけで何か悪いことがあるということです。たとえば、MATLABを使用します。ターミナルを開いて入力します matlab -nodisplay -nodesktop -nosplash その後、一連のスクリプトを実行します。その後、私はどちらか exit MATLABを終了してからターミナルウィンドウを閉じるか、単にターミナルウィンドウを閉じます。これら2つの方法の違いは何ですか?2番目の方法は何らかの形で何かを「害」しますか?最初の方法が好ましいですか?どうして?


4
git設定は複数のリポジトリに設定できますか?
Gitは3つのレベルで設定値をサポートしているようです: システムごとのグローバル設定(に保存/etc/git-core) ユーザーごとのグローバル設定(に保存~/.gitconfig) リポジトリごとのローカル設定(に保存$REPO/.git/config) これらのオプションはほとんどの基礎をカバーしていますが、第4レベルを処理する方法を探しています。リポジトリの(非常に)大規模なコレクションがあるためuser.email、通常とは異なる値を使用する必要があります。これらのリポジトリは、自動化されたスクリプトを介して作成および操作されることが多く、リポジトリごとのローカル設定の設定は面倒です。 問題のリポジトリはすべて、ローカルシステムの特定のパスプレフィックスの下にあります。そのパスの下にあるすべてのリポジトリに継承される設定値をどこかに設定する方法はありますか?(同様の.htaccess設定の並べ替えは、ファイルシステムまでずっと継承されます。)おそらく、グローバル構成ファイルに条件値を設定する方法があるでしょうか。私のような一連のリポジトリに対処するために、UNIX環境で他にどのような調整を行うことができますか?
18 shell  git 


3
「トップ」で特定のプロセスを選択する方法は?
1つのプログラムに複数のインスタンスがある場合、実行すると次のようになりpidof programます。 `1 2 3` top -pコンマ区切りの引数を受け入れます:1, 2, 3。 これはそれtop -p `pidof program`が機能しないことを意味します: top: unknown argument '1' usage: top -hv | -bcisSH -d delay -n iterations [-u user | -U user] -p pid [,pid ...] これを行う方法を教えてください。私はawkやsedなどに慣れていません...

7
並列バックグラウンドプロセス(サブシェル)の終了コードを収集する
次のようなbashスクリプトがあるとします。 echo "x" & echo "y" & echo "z" & ..... echo "Z" & wait サブシェル/サブプロセスの終了コードを収集する方法はありますか?これを行う方法を探していますが、何も見つかりません。これらのサブシェルを並行して実行する必要があります。そうでなければ、これは簡単です。 汎用的なソリューションを探しています(並行して実行するサブプロセスの数が不明/動的です)。

2
二重引用符内の単一引用符とBashリファレンスマニュアル
セクション3.1.2.3の二重引用符で、Bashマニュアルは次のように述べています。 文字を二重引用符( '"')で囲むと、引用符内のすべての文字のリテラル値が保持されますが、例外は '$'、 '`'、 '\'、および履歴展開が有効な場合は '!'です。 現時点では、単一引用符(')に関心があります。 前のセクションで説明した特別な意味、セクション3.1.2.2は次のとおりです。 文字を一重引用符(')で囲むと、引用符内の各文字のリテラル値が保持されます。バックスラッシュが先行する場合でも、単一引用符は単一引用符の間に出現しない場合があります。 2つの博覧会を組み合わせて、 echo "'$a'" 変数がここでa定義されていない(従って$a= NULL文字列)は、印刷すべきである$aように、画面上に''シールドであろう、それは特別な意味内部だ有する、$特別な解釈から。代わりに、印刷し''ます。なぜそうなのか?
18 bash  shell  quoting 

1
プログラムを終了すると、「man」はどのように画面を復元しますか?
catまたはのようなプログラムのマニュアルページを開くと、マニュアルページのls内容が印刷され(適切な単語ではない場合があります)、を押すqと、manコマンドを呼び出す前と同じように画面が表示されます。復元はどのように行われますか?何がすべてを消去してから、シェルの以前の内容を印刷しますか? 例: [VAR121@Tesla Testing]$ man ls 出力: LS(1) User Commands LS(1) NAME ls - list directory contents SYNOPSIS ls [OPTION]... [FILE]... ............ を押すqと、画面は以下に示すプロンプトのようなシェルのデフォルトの外観に戻ります。 [VAR121@Tesla Testing]$ man ls [VAR121@Tesla Testing]$ 画面はどのように復元されますか?
18 bash  shell  terminal  man 

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