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

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


4
ssh $ host $ FOOおよびssh $ host“ sudo su user -c $ FOO”タイプの構造で引用
私はしばしばssh経由で複雑なコマンドを発行します。これらのコマンドにはawkまたはperlの1行へのパイプが含まれ、その結果、単一引用符と$が含まれます。私は、適切に引用を行うためのハードで速いルールを理解することも、それに対する良い参照を見つけることもできませんでした。たとえば、次のことを考慮してください。 # what I'd run locally: CMD='pgrep -fl java | grep -i datanode | awk '{print $1}' # this works with ssh $host "$CMD": CMD='pgrep -fl java | grep -i datanode | awk '"'"'{print $1}'"'" (awkステートメントの余分な引用符に注意してください。) しかし、どうすればこれを動作させることができssh $host "sudo su user -c '$CMD'"ますか?このようなシナリオで見積もりを管理するための一般的なレシピはありますか?..
30 bash  shell  ssh  quoting 



3
Bashスクリプトファイルをsudo実行すると、Bashスクリプト内のすべてのコマンドもsudoとして実行されますか?
Bashで自動化されたインストール後スクリプト(post-install.shたとえばと呼ばれる)を作成したい。このスクリプトは、リポジトリを自動的に追加および更新し、パッケージをインストールおよび更新し、構成ファイルを編集します。 ここで、たとえばを使用してこのスクリプトを実行するsudo post-install.shと、sudoパスワードの入力が1回だけ求められますか、それともsudoスクリプト内でsudo許可が必要なコマンドを呼び出すたびにパスワードを入力する必要がありますか?言い換えれば、bashスクリプト内のコマンドは、いわば実行権限を「継承」していますか? そして、実際にそうする場合、sudoアクセス許可がタイムアウトする可能性はまだありますか(たとえば、特定のコマンドがsudoタイムアウトを超えるのに十分な時間がかかる場合)?または、最初のsudoパスワード入力は、スクリプト全体が完了するまで続きますか?

6
シェルコマンドを使用して、テキストファイルの最初の列と最後の列のみを表示する方法は?
テキストファイルの最初の列と最後の列のみを表示するためにsedコマンドを使用する方法を理解するには、助けが必要です。これが私がこれまでコラム1に持っていたものです。 cat logfile | sed 's/\|/ /'|awk '{print $1}' 最後の列を表示するための私の弱い試みは次のとおりでした: cat logfile | sed 's/\|/ /'|awk '{print $1}{print $8}' ただし、これは最初の列と最後の列を取り、それらを1つのリストにマージします。sedおよびawkコマンドで最初の列と最後の列を明確に印刷する方法はありますか? サンプル入力: foo|dog|cat|mouse|lion|ox|tiger|bar
30 shell  sed  awk 

4
なぜ-eが括弧()の後にORリスト||が付いたサブシェル内では機能しないのですか?
最近、次のようなスクリプトに遭遇しました。 ( set -e ; do-stuff; do-more-stuff; ) || echo failed これは私には問題ありませんが、機能しません!set -eあなたが追加した場合、適用されません||。それがなければ、うまくいきます: $ ( set -e; false; echo passed; ); echo $? 1 ただし、を追加する||と、set -e無視されます: $ ( set -e; false; echo passed; ) || echo failed passed 実際の独立したシェルを使用すると、期待どおりに機能します。 $ sh -c 'set -e; false; echo passed;' || echo failed …

6
サブシェルからシェルスクリプトを終了する
このスニペットを検討してください。 stop () { echo "${1}" 1>&2 exit 1 } func () { if false; then echo "foo" else stop "something went wrong" fi } 通常、funcが呼び出されると、スクリプトが終了します。これは意図した動作です。ただし、次のようなサブシェルで実行される場合 result=`func` スクリプトは終了しません。つまり、呼び出しコードは毎回関数の終了ステータスをチェックする必要があります。これを回避する方法はありますか?これは何のset -eためですか?

7
どのシェルを使用する必要があります-tcsh vs bash?[閉まっている]
私はtcsh今長い間使っています。しかし、何かを探しているときはいつでも、指定されたメソッドがbash特定のものであることがよくあります。シェルスクリプトの構文でさえ、2つでは異なります。 私がインターネットで検索と学習を経験bashしたことから、より一般的なシェルが使用されているようです。このサイトのタグ付けされた質問の数でさえ、bashタグ付けされtcshた質問の数よりもはるかに多い(現在5倍)。 だから、bashに切り替えるべきかどうか疑問に思っています。どう思いますか? なぜ固執するtcsh必要があるのbashですか
30 linux  shell  bash  fedora  tcsh 

4
子を含むターミナルシェルのプロセスツリーを表示するにはどうすればよいですか?
コマンドプロンプトからスクリプトを起動すると、シェルはそのスクリプトのサブプロセスを生成します。ターミナルレベルのプロセスとその子との関係をpsツリースタイルの出力で使用して示したいと思います。 これどうやってするの? 今まで試したこと ファイル: script.sh #!/bin/bash ps -f -p$1 次に、ターミナルシェルのプロセスIDを渡して、コマンドラインからスクリプトを呼び出します。 $ ./script.sh $$ 私が欲しいのはこのようなものです トップレベル(端末)シェルプロセス ./script.sh psコマンド自体のプロセス USER PID [..] ubuntu 123 -bash ubuntu 1234 \_ bash ./script.sh ubuntu 12345 \_ ps auxf 私が得ているものは: PID TTY STAT TIME COMMAND 14492 pts/24 Ss 0:00 -bash
30 shell  ps 


1
「find -exec sh -c」を安全に使用できますか?
私はいくつかのファイルに使用しようとfindしecho 0ていますが、明らかにこれはsh -c: find /proc/sys/net/ipv6 -name accept_ra -exec sh -c 'echo 0 > {}' \; しかし、sh -cwith find -execを使用すると、引用の問題が疑われるため、非常に不安になります。私はそれを少しいじりましたが、明らかに私の疑念は正当化されました: 私のテスト設定: martin@dogmeat ~ % cd findtest martin@dogmeat ~/findtest % echo one > file\ with\ spaces martin@dogmeat ~/findtest % echo two > file\ with\ \'single\ quotes\' martin@dogmeat ~/findtest % echo three > …
29 shell  find 

2
現在の小数点記号はどれですか?
POSIXシェルスクリプトがあるとします。 私が管理していないさまざまなシステム/環境で実行する必要がある ロケール設定を尊重するプログラムによって出力される文字列から小数点記号を削除する必要があります。 最も一般的な方法で小数点区切り文字を検出するにはどうすればよいですか?

3
ログアウトせずに親シェルに切り替える
ローカルアカウントで開始するとします。 avindra@host:~> 次にルートに切り替えます: host:~ # 次に、oracleに切り替えます。 [ oracle@host:~] Oracleシェルからログアウトせずに、ルートシェル(親)に戻る方法はありますか? この場合、oracleアカウントには sudo権限がないため便利です。したがって、たとえば、私はoracleの/ some / really / deeply / nested / directoryにあり、あらゆる種類の特別な環境変数を設定しています。しかし、いくつかのシステムファイルに触れるには、ルートに戻る必要があります。 現在、私はOracleシェルからドロップしてルートに戻り、ルートコマンドを実行してからOracleに切り替えます。不便なことに、最初からログインしているため、作業ディレクトリと環境が失われます。 そうは言っても、私が求めていることを行う方法はありますか?
29 shell 

1
一部のコマンドでBASHプロセスの置換が機能しないのはなぜですか?
場合によっては、プロセスの置換が期待どおりに機能しません。以下に例を示します。 入力: gcc <(echo 'int main(){return 0;}') 出力: /dev/fd/63: file not recognized: Illegal seek collect2: error: ld returned 1 exit status 入力: ただし、別のコマンドで使用すると、期待どおりに機能します。 grep main <(echo 'int main(){return 0;}') 出力: int main(){return 0;} 私は他のコマンドで同様の失敗に気づきました(つまり、プロセス置換からのファイルを期待するコマンドは使用できない/dev/fd/63か、類似しています)。この障害gccは最新のものです。プロセスの置換がこの方法で失敗し、使用すべきでないときを判断するために知っておくべき一般的なルールはありますか? Ubuntu 12.04でこのBASHバージョンを使用しています(archおよびdebianでもこれを見ました): GNU bash、バージョン4.3.11(1)-release(i686-pc-linux-gnu)

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