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

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

4
stdoutから行末文字を削除しますか?複数の行を単一の行に
次のテキストを出力するスクリプトがあります。これは、Netopia 2210-02 ADSL2モデムからの出力です。 ADSL Line State: Up ADSL Startup Attempts: 1 ADSL Modulation: DMT ADSL Data Path: Fast Datapump Version: DSP 7.2.3.0, HAL 7.2.1.0 SNR Margin: 8.20 9.00 dB Line Attenuation: 57.50 31.00 dB Output Power: 17.09 12.34 dBm Errored Seconds: 0 0 Loss of Signal: 0 476 Loss of …

2
bashで開始された実行可能ファイルの順序
testコマンドをbashで実行すると、test(条件式を評価する)組み込みユーティリティが起動します。 $ type test test is a shell builtin $ type -a test test is a shell builtin test is /usr/local/bin/test test is /usr/bin/test $ ただし、type -a test上記の出力に示されているように、test/ usr / local / binディレクトリに別のファイルがあり、/ usr / binディレクトリに別のファイルがあります。実行可能ファイルの順序はどのようになっていますか。つまり、組み込みコマンドは常に優先され、残りのコマンドは$ PATH変数のディレクトリ順序に依存していますか?さらに、起動した実行可能ファイルの順序を変更することは可能です。たとえば、と入力するとtest、bash-builtinの代わりに/ usr / bin / testが起動しtestますか?

4
SIGINTなどをトラップするときに終了コードを保持しますか?
trapたとえばhttp://linuxcommand.org/wss0160.php#trapで説明されているように使用してctrl-c(または類似のもの)をキャッチし、終了する前にクリーンアップすると、返される終了コードが変更されます。 これはおそらく現実の世界では違いはありません(たとえば、終了コードは移植可能ではなく、その上に、プロセスが終了したときのデフォルトの終了コードで説明されているように常に明確であるとは限らないためです)。それでも、本当にそれを防ぎ、代わりに中断されたスクリプトのデフォルトのエラーコードを返す方法はありませんか? 例(bashですが、私の質問はbash固有のものと見なすべきではありません): #!/bin/bash trap 'echo EXIT;' EXIT read -p 'If you ctrl-c me now my return code will be the default for SIGTERM. ' _ trap 'echo SIGINT; exit 1;' INT read -p 'If you ctrl-c me now my return code will be 1. ' _ 出力: $ ./test.sh …


2
シェルの$ @のデータ構造は何ですか?
通常、$@$ 0を除くすべての引数を表すために使用します。ただし、データ構造$@が何であるかはわかりません。 $*二重引用符で囲むと動作が異なるのはなぜですか、誰でも通訳レベルの説明をくれますか? forループで反復できるため、配列のようです。ただし、simple echo $@で完全にエコーすることもできます。配列の場合、最初の要素のみが表示されます。シェルの制限により、それを実行するための実験コードをこれ以上書くことができません。 この投稿の違い:この投稿は、どのように$@振る舞うかを示します$*。しかし、私はのデータ型について疑問に思っています$@。Pythonのような解釈言語としてのシェルは、一連の基本型に従ってデータを表現する必要があります。または、言い換えると、$ @がコンピューターのメモリーにどのように保存されているかを知りたいのです。 文字列、複数行の文字列、または配列ですか? 一意のデータ型の場合、カスタム変数をこの型のインスタンスとして定義できますか?
13 bash  shell 

2
stdout / stderrのインターリーブを妨げるものは何ですか?
いくつかのプロセスを実行するとします。 #!/usr/bin/env bash foo & bar & baz & wait; 上記のスクリプトを次のように実行します。 foobarbaz | cat 私の知る限り、プロセスのいずれかがstdout / stderrに書き込むとき、それらの出力はインターリーブしません-stdioの各行はアトミックであるようです。それはどのように機能しますか?各行のアトミック性を制御するユーティリティは何ですか?
13 shell  osx  stdout  output  stderr 

3
「ps ax」が「#!」ヘッダーなしで実行中のbashスクリプトを見つけられないのはなぜですか?
このスクリプトを実行すると、殺されるまで実行することを意図しています... # foo.sh while true; do sleep 1; done ...を使用して見つけることができませんps ax: >./foo.sh // In a separate shell: >ps ax | grep foo.sh 21110 pts/3 S+ 0:00 grep --color=auto foo.sh ...ただし#!、スクリプトに共通の " "ヘッダーを追加するだけの場合... #! /usr/bin/bash # foo.sh while true; do sleep 1; done ...その後、同じpsコマンドでスクリプトが検索可能になります... >./foo.sh // In a separate shell: >ps …

2
UbuntuでshにBashを使用する方法
rpmファイルとしてリソースを持つ巨大なプログラムをインストールしています。の行で立ち往生 #!/bin/sh SCITEGICPERLBIN=`dirname $0` SCITEGICPERLHOME=`dirname $SCITEGICPERLBIN` if [ $SCITEGICPERLHOME == "." ] どうやら、この構文shを使用bashしてRed Hat Linuxで動作しますがunexpected operator、Ubuntuでエラーが発生します。 bashスクリプトがrpmパッケージから取得されるため、スクリプトをに変更できません。rpmパッケージを抽出して再パックすることはできますが、そのようなスクリプトが多数ある可能性があります。 御馳走にシェルのデフォルトを変更する方法がある#!/bin/shとしてbash扱うことができ、または何か他の[オペレータは?

2
SSHがバックグラウンドプロセスを待たないのはなぜですか?
ssh -tバックグラウンドジョブが完了するのを待たないのはなぜですか? 例: ssh user@example 'sleep 2 &' sshは2秒後に戻るため、これは期待どおりに機能しますが、 ssh user@example -t 'sleep 2 &' sleep終了するのを待たずにすぐに戻ります。 誰もがこの理由を説明できますか?ssh -t戻る前にすべてのバックグラウンドプロセスが完了するのを待つ方法はありますか? 私のユースケースは、でスクリプトを開始することです。ssh -tこのスクリプトは、メインスクリプトの終了後も存続する必要があるいくつかのバックグラウンドジョブを開始します。でssh -t、これは、これまでは不可能です。

6
実行前のコマンドバイナリの検証
bashスクリプトから実際に実行していることを確認する方法はありますか? (例えば:あなたのbashスクリプトは、いくつかのコマンドを呼び出していると言うtar、mail、scp、mysqldump)、あなたはそのことを確認して喜んでいるtar本当の、実際にあるtarことによって決定された、rootファイルおよび親ディレクトリの所有者と書き込み権限を持つ唯一の一つであるユーザー所有者/tmp/surprise/tarであるwww-dataかapache2所有者ではない人もいます。 確かに私PATHは環境について知っていますが、これを実行中のbashスクリプトからさらにチェックできるかどうか、そしてそうであれば、どのくらい正確に知りたいですか? 例:(擬似コード) tarfile=$(which tar) isroot=$(ls -l "$tarfile") | grep "root root" #and so on...

2
POSIXシェルの関数と変数の個別の名前空間
ダッシュでは、関数と変数は別々の名前空間にあるように見えます: fn(){ fn="hello world" } fn; echo "The value is $fn!" #prints: The value is hello world! fn; echo "The value is $fn!" #prints: The value is hello world! #the fn variable doesn't conflict with the fn function これはダッシュ固有の機能ですか、それともPOSIXの保証ですか?
13 shell  posix  dash 

8
単語による変数の内容の反転
だから変数を持っているなら VAR='10 20 30 40 50 60 70 80 90 100' エコーします echo "$VAR" 10 20 30 40 50 60 70 80 90 100 ただし、スクリプトをさらに下に移動すると、この変数の順序が逆になり、次のように表示されます。 echo "$VAR" | <code to reverse it> 100 90 80 70 60 50 40 30 20 10 revを使用してみましたが、文字通りすべてが逆転したため、 echo "$VAR" | rev 001 09 08 …
13 linux  bash  shell  variable 

3
`set -e`を指定したbashスクリプトは`…&&… `コマンドで停止しません
最初のエラーでbashスクリプトset -eを停止するために使用します。 次のコマンドを使用しない限り、すべて正常に動作し&&ます。 $ cat script set -e cd not_existing_dir && echo 123 echo "I'm running! =P" $ $ ./script ./script: line 2: cd: not_existing_dir: No such file or directory I'm running! =P $ と比べて: $ cat script set -e cd not_existing_dir echo "I'm running! =P" $ $ ./script ./script: …

2
どのプログラムがそれを実行したかをシェルスクリプトが知る方法はありますか?
* nixの世界では、どのスクリプトがそれを実行したかについての情報をシェルスクリプトが持つ方法はありますか? 例: /path/to/script1 /path/to/script_xyz この想像上のシナリオでscript_xyzは、パス情報(/path/to/script1) または プロセスPID 実行したエンティティの 注:さまざまなソリューションとアプローチに興味がありますが、実際にこれが実際に可能になるとは思わない

2
特殊文字を通常の文字として使用する方法は?
「二重引用符文字( ")の入力方法?"などの多くの質問 求められている、と我々は同じ答え(と、それを入力して、私たちのコミュニティを乱雑にしたくない\"で囲まれていない場合は'、S "で囲まれている場合'、S。)だから、質問はここにあります。 通常のような特殊な文字を端末に入力することはできません。たとえば、次のコマンドは失敗します。 echo Updates (11) それでは、これらの文字を通常の文字であるかのように端末に入力する方法は? !#$^&*?[](){}<>~;'"\|<space><tab><newline>

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