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

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

3
「read」を使用してスクリプトをパイピングしてbashする
私はそれを通すことによって、スクリプトを実行する必要があるbashとwget(いうよりはbashで直接それを実行しています)。 $ wget -O - http://example.com/my-script.sh | bash スクリプトにreadステートメントが含まれているため、機能しません。何らかの理由で、bashにパイプする場合、これらは機能しません。 # Piping to bash works in general $ echo 'hi' hi $ echo "echo 'hi'" | bash hi # `read` works directly $ read -p "input: " var input: <prompt> # But not when piping - returns immediately $ echo 'read …
10 bash  shell  pipe  read 

4
$ 1が1でなくても、 'if [$ 1 =“ 1”]'ブランチが常に選択されるのはなぜですか?
次のような「teleport.sh」という名前のシェルスクリプトがあります。 if [ $1="1" ]; then shift mv "$@" ~/lab/Sun elif [ $1="2" ]; then shift mv "$@" ~/lab/Moon elif [ $1="3" ]; then shift mv "$@" ~/lab/Earth fi 私が実行すると: sh teleport.sh 2 testfile これtestfileは~/lab/Sunディレクトリに移動されますが、そのスクリプトに1または '1'を渡さなかったため、非常に混乱しています。 ここで何が問題になっていますか?
10 bash  shell  test 

6
正規表現でファイルから複数の行を取得する方法は?
正規表現でファイルから複数の行を取得する方法は? 正規表現で複数の行を取得したり、複数の行を変更したりすることがよくあります。事例: 私はXML / SGMLファイルの一部を読み込もうとしています(形式が正しくないか、予測可能な構文であるとは限らないため、正規表現は適切なパーサーよりも安全です。さらに、これを完全に実行できるようにしたいと思います。いくつかのキーワードだけがわかっている非構造化ファイル)(SolarisおよびLinuxで実行される)シェルスクリプト内。 XMLの例: <tag1> <tag2>bar</tag2> </tag1> <tag1> <tag2>foo</tag2> </tag1> これから私は<tag1>それがその中にfooどこかに含まれている場合に読みたいと思います。 以下のような正規表現は、(<tag1>.*?foo.*?</tag1>)右側の部分が、のようなツール与えるべきであるgrepとsed、単一のラインを持つ私のためだけの仕事を。どうすれば入手することができますか <tag1> <tag2>foo</tag2> </tag1> この例では?
10 shell  sed  grep 

1
Bashで「エイリアス」を作成する方法はいくつありますか?
私は2つの方法しか知りません:alias foo=barとfunction foo() { bar }。 私が質問している理由は、bashセッションの1つで突然- がエラーになるlnため、コマンドを実行できないためbashです-bash: /usr/local/.../ln: No such file or directory(/usr/local/.../は私のPATH環境変数のエントリの1つです)。 PATHただし、問題が発生することはありません。実行するwhich lnと期待されるバイナリが出力されるためです/usr/bin/ln(絶対パスを指定すれば問題なく実行できます)。 私はまたのためにチェックしln、私にaliasとfunction宣言し、何もありません。 $ declare -f | grep ln $ alias | grep ln 問題は1つのbashセッションで発生しているだけです。新しいシェルを開始すると、再び正常に機能しますが、この特定のbashセッションで突然この問題が発生した原因を知りたいのです。 これを引き起こしている可能性のあるものに関するアイデアはありますか?
10 bash  shell  alias 

6
iノード番号を見つけるポータブルな方法
最初は私はstat -c %i file(刑務所の存在を検出するのを助けるために)使用しましたが、これは太陽の下でどのLinuxディストリビューションでも機能するように見えました。OS Xではを使用する必要がありましたls -i file | cut -d ' ' -f 1。 * nixプラットフォーム間で移植可能で悪名高い気まぐれに依存しないシェルスクリプトでファイルのiノード番号を見つける方法はありますlsか?
10 shell  inode 

3
リストを取得してファイルから削除するにはどうすればよいですか?
/ etc / remotedomainsから削除する必要があるドメイン名の長いリストがあります。それらはおそらくファイル内で特定の順序ではありません。各ドメインは1行です。 リストを繰り返し処理して、リモートドメインでその行を見つけて削除する方法を教えてください。

2
なぜPOSIX Shell Grammarの開始中括弧の後に中括弧コマンドグループにスペースが必要なのですか?
TL; DR:POSIXブレースグループで{予約語の後にスペースが必要なのに、サブシェルでは予約語の後にスペースがないのはなぜ(ですか? POSIXシェル文法は、ブレースグループとサブシェルを次のように定義します brace_group : Lbrace compound_list Rbrace subshell : '(' compound_list ')' 今、それを文字通り読んでいる場合、スペースは重要です。これは、次のように開き中括弧と括弧を区切るスペースが必要であることを意味します { echo hello world; } ( echo hello world ) これは、複合コマンドの定義とも一致します。 これらの複合コマンドのそれぞれには、最初に予約語または制御演算子があり、最後に対応するターミネーター予約語または演算子があります。 ただし、意味がないのはなぜか(list)、問題なく機能する( list )(その後ろのスペース(は不要)が、ブレースの展開には先行スペースが必要である、つまり機能{echo hello;}しないためである。 もちろん、予約語がシェルワードとして扱われると、フィールド分割の概念に合わせるために後でスペースが必要になりますが、定義自体はスペースについて言及していません。さらに、複合コマンドのPOSIX定義で両方が予約語と見なされている場合{、(これらの予約語の後のスペース文字に関して、それらの扱いが異なるのはなぜですか?現在、ksh(1)のマニュアルには次のように記載されています。 文字のシーケンスである単語は、引用符で囲まれていない空白文字(スペース、タブ、および改行)またはメタ文字(<、>、|、;、&、(および))で区切られます。 言い換えると、kshが(最初の単語がコマンドまたは変数の割り当てである単語の区切り文字として認識することは理にかなっています。ただし、POSIXは(メタ文字として言及されていないようです。POSIX文法に関して私が見つけた唯一の可能な説明{は、「トークン」と見なさ(れるというものです。 /* These are reserved words, not operator tokens, and are recognized when reserved words are recognized. */ …
10 shell  posix  subshell  syntax 


6
シェルスクリプト内でユーザーのデフォルトシェルを見つける
シェルスクリプト内で現在のユーザーのデフォルトシェルを見つける方法があるかどうか疑問に思っていましたか? 使用例:コマンドのエイリアスを設定するスクリプトを作成しています。このエイリアスはシェルスクリプト内で設定されます。 !# /bin/bash alias = 'some command to set the alias' スクリプトにロジックがあり、スクリプトを実行するユーザーのデフォルトシェルを見つけて、このエイリアスをそれぞれの〜/ .bashrcまたは〜/ .zshrcファイルに追加します。 しかし、スクリプトの前にシバンを追加し、bashを使用するよう明示的に要求しているため、ここに投稿された回答は、ZSH端末でこのスクリプトを実行しているにもかかわらず、常に期待どおりbashを返します。 シバンセットに関係なく、スクリプトが実行されるシェルタイプを取得する方法はありますか? MacとすべてのLinuxベースのビストロの両方で機能するソリューションを探しています。

5
色付きのgrep出力:GREP_OPTIONSではなくエイリアスではありません
のカラー出力が必要ですgrep。 .... だが 戦略1:GREP_OPTIONS。しかし、これは非推奨です。http://www.gnu.org/software/grep/manual/html_node/Environment-Variables.htmlを参照してください 戦略2:GREP_COLORSは一見したところ解決策のように見えますが、これは別のことをします。 戦略3:エイリアス。find ... | xargs grepxargsはエイリアスを評価しないため、これはに対しては機能しません。 戦略4:単純なラッパースクリプトを記述します。いいえ、これは汚すぎるため、解決するよりも問題が多いと思います。 戦略5:ソースコードにパッチを適用する 戦略6:grep開発者に連絡し、GREP_OPTIONSの交換を依頼する 戦略NICE-and-EASY:...これはありません。私は見当もつかない。 これを解決するには? 助けてくれてありがとう! ...しかし、私は賞金を与えることができません 私を失礼、傲慢、侮辱的、虐待的と呼びます.... 回避策しかありません-解決策はありません。質問に答える回答はありませんでした。 ご清聴ありがとうございました。
10 shell  grep  colors 

5
普遍的な非bashの「時間」ベンチマークの代替?[閉まっている]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 3年前休業。 異なるシェル間でスクリプトの実行時間を比較するために、一部のSEの回答は、次のようにbashの組み込み timeコマンドの使用を提案しています。 time bash -c 'foo.sh' time dash -c 'foo.sh' ... など、すべてのシェルをテストします。このようなベンチマークでは、各シェルがそれ自体をロードして初期化するのにかかる時間を排除できません。例えば、上記のコマンドの両方が上に格納されたと仮定初期フロッピーディスクの読み出し速度と遅いデバイス、(124キロバイト/秒)、 dash(〜150K実行)についてロードする7Xより速くbash(〜1M)、シェル読み込み時間はtime数値を歪めます-これらのシェルの事前読み込み時間は、シェルが読み込まれた後のfoo.sh各シェルの下の実行時間の測定には関係ありません。 各シェル内から実行できるスクリプトタイミング用に実行するのに最適なポータブルで一般的なユーティリティは何ですか?したがって、上記のコードは次のようになります。 bash -c 'general_timer_util foo.sh' dash -c 'general_timer_util foo.sh' 注意:移植性や汎用性がないため、シェル組み込み timeコマンドはありません。 さらに、utilがシェルの内部コマンドとパイプラインにかかる時間をベンチマークでき、ユーザーが最初にそれらをスクリプトにラップする必要がない場合はさらに良いでしょう。このような人工的な構文は役に立ちます: general_timer_util "while read x ; do echo x ; done < foo" 一部のシェルtimeはこれを管理できます。たとえばbash -c "time while false ; do : ; done"動作します。システムで何が機能するか(そして機能しないか)を確認するには、次のことを試してください。 …

2
/ bin / falseを実行できません:そのようなファイルまたはディレクトリはありません
Mac OSで次のコマンドを使用してGNU Screenを開こうとしています。 host:~ user$ screen screenターミナルが開きますが、すぐにエラーメッセージが表示されて終了します。 / bin / falseを実行できません:そのようなファイルまたはディレクトリはありません 端末がbash起動時にシェルを開くように構成されています。端末シェルをに設定しようとしましshたが、同じエラーが発生します。 しかし、screenコマンドをとして実行するとsudo、コマンドは成功します。 通常のユーザーの場合はどうすれば解決できますか?
10 bash  shell  osx 


1
bashrcの遅延置換
〜/ .bashrcが実行されるとき(ターミナルを開くとき)ではなく、実行時に置換~/.bashrcを評価$()するエイリアスをどのように取得しますか? このコマンドを頻繁に実行して、エイリアスを追加します。 svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff ただし、~/.bashrcエイリアスとして追加すると、ターミナルを開いたときの評価にハードコードされていることがわかります。 $ alias alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff' 端末を開いた場合、~エラーが発生します。 svn: E155007: '/home/dotancohen' is not a working copy svn: E155007: '/home/dotancohen' is …
10 bash  shell  quoting  alias  bashrc 

2
端末を閉じずにすべての変数をクリアする
端末を閉じずにコマンドプロンプトで定義したすべての変数をクリアする方法を知りたいのですが。 たとえば、コマンドプロンプトで次のように変数を設定したとします。 $ a=1 次に、$aターミナルを閉じずに変数(および同様に定義された他の多くの変数)を削除します。使用できunsetましたが、大きいのが多ければ多忙です。変数の

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