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

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


4
cdのラッパーを書くときにcd“ $ 1”の代わりにcd“ $ @”を使用する必要があるのはなぜですか?
他の場所では、次のようにcd関数を見ました: cd() { builtin cd "$@" } $@代わりに使用することが推奨されるのはなぜ$1ですか? テストディレクトリ「r st」を作成し、この関数を含むスクリプトを呼び出しましたが、どちらの方法でも機能しました $ . cdtest.sh "r st" しかし、 $ . cdtest.sh r st私が使用するかどうか失敗しました"$@"か"$1"

2
「in foo bar…」部分なしの「for」ループをバッシュ
私は最近、私を混乱させたコードを見ていました。コードはこの例になります #!/bin/bash for var; do echo "$var" done コマンドライン引数で実行すると、それらが出力されます $ ./test a b c a b c これは、私にとっては予想外のことです。var未定義のため、なぜこれはエラーにならないのですか?これを「グッドプラクティス」と見なしていますか?

3
Ctrl + Cのときに^ Cを削除
Red Hat Enterprise Linux 6( "Santiago")のシェルインクルードで+ を^C押したときに削除する方法はありますか?自分で編集する許可があります。CTRLC.bash_profile
25 shell 

2
プロセス置換を実現するポータブル(POSIX)の方法は何ですか?
などの一部のシェルは、次のようbashにプロセス出力をファイルとして表示する方法であるプロセス置換をサポートしています。 $ diff <(sort file1) <(sort file2) ただし、この構造はPOSIXではないため、移植性がありません。どのように達成される置換を処理することができPOSIXにやさしい方法(で動作すなわち1 /bin/sh)? 注:質問は、ソートされた2つのファイルをどのように比較するかを尋ねているのではありません-これは、プロセス置換を示すための不自然な例です!

2
テキストエディタでコマンドプロンプトを開く-これは何と呼ばれていますか?
Bashで私のお気に入りのトリックの1つは、テキストエディターでコマンドプロンプトを開くことです。これを(viモードで)押して行いESC vます。これを行うと、コマンドプロンプトにあるものはすべて、選択した$ EDITORに表示されます。その後、コマンドをドキュメントのように編集し、その一時ファイルのすべてを保存して終了すると、実行されます。 友人の誰もこのヒントを聞いたことがないことに驚いているので、共有できるドキュメントを探していました。問題は、その上で何も見つけられなかったことです。また、このヒントに関連する検索用語は非常に一般的であるため、ドキュメントをグーグル検索するときには役に立ちません。 私が実際にそれを調べることができるように、誰もこの技術が何と呼ばれるか知っていますか?

2
関数、エイリアス、実行可能ファイルのハイフンに問題はありますか?
私のテスト(BashおよびZシェル)では、名前にハイフンが含まれる関数またはエイリアスまたは実行可能なシェルスクリプトの定義に問題はありませんでしたが、これがすべてのシェルおよびすべてのユースケースで問題ないことを確信していません。 私がこれをしたい理由は、ハイフンはアンダースコアよりも入力しやすいため、より速く、よりスムーズになります。 それが問題ではないと信頼するのをためらう理由の1つは、一部の言語(Rubyなど)では、ハイフンが周囲にスペースがなくてもマイナス記号として解釈されることです。ハイフンがスペースなしでもオプションを通知するものとして解釈されるシェルで、このようなことが起こるかもしれませんが、私は驚かないでしょう。 私が少し疑っているもう1つの理由は、テキストエディターがハイフンを含む関数の構文強調表示を台無しにしていることです。(もちろん、シェルスクリプトの構成を強調する構文の単なるバグである可能性は完全にあります。) ハイフンを避ける理由はありますか?
25 bash  shell  zsh  ksh  csh 

4
スペースとワイルドカードを含むパスを含む文字列でのbashスクリプトエラー
Bashスクリプトの基本を理解するのに苦労しています。ここに私が持っているものがあります: #!/bin/bash FILES="/home/john/my directory/*.txt" for f in "${FILES}" do echo "${f}" done 私がやりたいのは、すべての.txtファイルをforループにリストすることです。しかし、中のスペースmy directoryとアスタリスクは*.txtうまく再生されていません。二重引用符の有無にかかわらず、変数名に中括弧の有無にかかわらず使用してみましたが、すべての.txtファイルを印刷できません。 これは非常に基本的なことですが、疲れてまっすぐに考えることができないため、私はまだ苦労しています。 何が間違っていますか? ファイルにスペースやアスタリスクがなければ、上記のスクリプトを正常に適用することができました。しかし、スペースとアスタリスクの両方があると、すべてが台無しになります。

3
shellcheckはbasenameを使用しないことを推奨しています:なぜですか?
shellcheckを試しています。 私はそのようなものを持っています basename "${OPENSSL}" そして、私は次の提案を受け取ります Use parameter expansion instead, such as ${var##*/}. 実用的な観点からは、違いは見当たりません $ export OPENSSL=/opt/local/bin/openssl $ basename ${OPENSSL} openssl $ echo ${OPENSSL##*/} openssl 以来basenameであるPOSIX仕様、私はそれがベストプラクティスであるべき理由はない理由を行います。ヒントはありますか?

2
fork爆弾のfork()はどこにありますか:(){:|:&};:?
警告:ほとんどのシェルでこのコマンドを実行すると、システムが破損し、修正するには強制シャットダウンが必要になります。 再帰関数:(){ :|: & };:とその機能を理解しています。しかし、フォークシステムコールがどこにあるのかわかりません。よくわかりませんが、パイプの中で疑ってい|ます。

2
変数からすべてのスペース、タブ、改行などを削除しますか?
これは私が得ているエラーであり、値が2になるはずの変数のために失敗しています(これを使用してこれを取得していますselect * from tabel)。その変数にスペースが入っています。 + 0 != 2 ./setjobs[19]: 0: not found. その変数からすべてのスペースまたは改行を削除するにはどうすればよいですか?缶tr、sedあるいは何の助け? これは私がやっていること: set_jobs_count=$(echo "set heading off; select count(*) from oppar_db where ( oppar_db_job_name, oppar_db_job_rec ) in ($var) ;" | \ sqlplus -s ${OP_ORA_USER}/${OP_ORA_PASS}@$OPERATIONAL_DB_NAME) これは提案どおりに機能します。 | sed 's/[[:space:]]//g' しかし、私はまだ次のような値を取得します: set_jobs_count= 2
25 shell  sed  tr  whitespace  newlines 

6
bashの履歴リストのサイズを5000行以上に設定する方法はありますか?
この質問は、UnixおよびLinux Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 HISTSIZE環境変数を5000より大きく設定しても、history組み込みの履歴リストを印刷すると、最後の5000コマンドのみが印刷されます。多くの場合、.bash_history5000行を超える大きな行があり、を押して初期コマンドに対処する必要Ctrl-Rがある場合がありますが、そのコマンドが5000コマンドを超える場合は、そのメカニズムを使用してアクセスできません。私は、私が使用することができます知っているgrep上で.bash_history、しかし、私は思うCtrl-Rのメカニズムがはるかに速く(便利)になります。私はgnu bashバージョン4.1を使用します。 これが私の.bashrcファイルの完全なコンテンツです。 #!/bin/bash # ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for examples # If not running interactively, don't do anything [ -z "$PS1" ] && return # don't put duplicate lines in the history. …
25 linux  bash  shell 


6
許可を逆に再帰的に確認するにはどうすればよいですか?
コマンドがあります。Apacheに付属している、または何らかの形でそれに関連している、アクセス許可をすべて確認するコマンドがあります。私が持っているのであれば/home/foo/bar/baz、それは権限がためのものであるものを私に教えてくれますbaz、bar、foo、とhome。誰もこのコマンドが何であるか、これを行う別の方法を知っていますか?コマンドは基本的に引数で始まり/、権限の問題を確認できるように、権限が途中で何であるかを知らせるまで機能します。


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