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

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

2
シンボリックリンクのターゲットが特定のパスを指すことを確認する方法
bashスクリプト内で、ファイルが次の構文のシンボリックリンクであるかどうかを確認できることを知っています。 if [ -L $path ] そのパスが特定のパスにリンクされているかどうかをテストする方法を知っている人はいますか?たとえば、のターゲットがで$pathあるかどうかを確認し/some/whereます。
16 bash  shell  symlink 

5
コマンドSedを使用せずに文字列を見つけて置き換える方法は?
ご存知のように、sed文字列の検索と置換は非常に効率的です。たとえば、「a」を見つけて「b」に置き換えますsed 's/a/b/g'。 代わりに他のコマンドまたはシェルスクリプトでこれを行うことは可能sedですか? これは、sedコマンドを持たない、TV用のトリミングされたLinuxシステム用です。そのため、代わりに他のコマンドまたはスクリプトを使用する必要がありますsed 's/a/b/g'. –

3
「サブシェル」と「子プロセス」の正確な違いは何ですか?
これとこれによれば、サブシェルは括弧を使用して開始されます(…)。 ( echo "Hello" ) これ、これ、およびこれによれば、コマンドが& echo "Hello" & Posix仕様では、subshellこのページの単語を使用していますが、このページでは定義されていません。また、同じページでは、「子プロセス」も定義されていません。 両方ともfork()正しいカーネル機能を使用していますか? いくつかのフォークを「サブシェル」と呼び、他のフォークを「子プロセス」と呼ぶ正確な違いは何ですか。
16 bash  shell  subshell 

8
Linuxシェルスクリプト:プログラムが存在する場合のみ実行し、存在しない場合は無視します
たとえば、適切なツールがインストールされている場合にのみ、実行中にステータスバナーを出力するLinuxシェルスクリプトをプログラミングしています(これは、システムパスで到達可能です)。 figlet 例: #!/usr/bin/env bash echo "foo" figlet "Starting" echo "moo" figlet "Working" echo "foo moo" figlet "Finished" 私は仕事に私のスクリプトのために希望のエラーのない場合であっても、figletされてインストールされていません。 何をすることができ実用的な方法?

6
Bourneシェルがディストリビューションで利用できない場合、hashbangで/ bin / shを使用するのは正しいですか?
一般に、シェルスクリプトには、スクリプトファイルの最初の行に次のコメントが含まれています#!/bin/sh。私が行った研究によれば、これは「ハッシュバン」と呼ばれ、従来のコメントです。このコメントは、このファイルがディレクトリ下のBourne Shellによって実行されることをUnixに通知します/bin。 私の質問はその点から始まります。今までこのようなコメントを見たことはありません#!/bin/bash。いつも#!/bin/shです。ただし、UbuntuディストリビューションにはBourne Shellプログラムがありません。Bourne Again Shell(bash)があります。 その点で、#!/bin/shUbuntuディストリビューションで書かれたシェルスクリプトにコメントを入れるのは正しいですか?

3
sshを介したコマンドでtrueとORする
pkill -fssh経由でリモートで実行しようとして、可能なエラーコードを破棄しようとすると(プロセスが見つからない場合でもスクリプトの残りの部分を続行するため)、|| true期待どおりに動作しません。 $ pkill asdf || true $ echo $? 0 $ pkill -f asdf || true $ echo $? 0 $ ssh pi@10.20.0.10 "pkill asdf || true" $ echo $? 0 $ ssh pi@10.20.0.10 "pkill -f asdf || true" 255 引用符で囲まれたコマンドではなく255を返すのはsshだと思いますが、なぜですか?
15 shell  ssh  kill 

3
Bash、パスの一部として常に$ PWDをチェックしますか?
背景:Linuxのバックグラウンドを持っていない同僚の1人が、./いくつかのコマンドの前に使用することを尋ねましたが、他のコマンドではありませんPATH。彼の反応は、それは愚かであり、./コマンドの前に入力する必要がないことだけでした。 質問:$PWD常に最初の項目になるようにシェルの動作を簡単に変更する方法はありPATHますか?
15 shell  usability 

1
対話型シェルは非対話型になりますか?
対話型シェルは非対話型になりますか? 注:「対話型と非対話型の違いは何ですか?」という基本的な質問について多くの研究を行ってきましたが、研究の結果、この質問をすることになりました。 この質問には、回答するために「インタラクティブ」にどのタイプの定義を使用するかが重要であるため、部分的に長い前文があります。定義は、特定のセットの任意のラベルです。さまざまなプロパティを説明できます。または、行動を予測し、目的を理解するために使用できる情報を提供できます。 この最後のタイプは、「アクション定義」または「動的定義」と呼ぶことができ、最も便利です。 ではman 1p sh、対話型シェルの次の定義が提供されています。 If the -i option is present, or if there are no operands and the shell’s standard input and standard error are attached to a terminal, the shell is considered to be interactive. 「-iオプション」の記述と「オペランド」という言葉の使用から、これは実行中のシェルで調べることができる属性ではなく、シェルの呼び出しを指します。 Bashのマニュアルページでは、少し異なる表現をしています。 An interactive shell is one started without non-option arguments …

1
sshはどのようにコマンドを実行しますか?
クライアントとサーバーの両方でBashを使用しています。SSH経由でコマンドを実行する場合: ssh <host> 'declare' シェル変数のリストを提供します。 ssh <host> 'mount' マウントポイントのリストを提供します。 ただし、declareBashビルトインである一方mount、外部コマンドです。サーバーに同じ名前のシェル組み込みコマンドと外部コマンドがある場合、SSHはどの方法を実行するのかをどのように判断しますか?
15 shell  ssh 

5
「if」と「then」は実際にプログラムされていますか
私はセミコロンがプログラムを分離するために使用されることを読みました: $ echo 3; ls -la それはを意味するのですかif、thenそしてelseここには別のプログラムがありますか? $ if [ $VARIABLE == abcdef ] ; then echo yes ; else echo no ; fi この質問はセミコロンに関するものではありません。


1
bash-builtinがCPUを100%焼くのを待つ
少なくともGNU bashバージョン4.3.42 x86_64 && GNU bashバージョン4.3.11 x86_64で発生します シグナルによって割り込み可能にするために(SIGUSR1として)sleep & wait $!単純な代わりに使用します。ただし、次のコマンドを実行すると、bashビルトインが奇妙な動作をするようです。sleepsleepwait ターミナル1: cat <( trap 'echo SIGUSR1' SIGUSR1; echo $BASHPID; while :;do sleep 1 & wait $!; echo test; done )& ターミナル2: kill -10 /the pid of the subshell, printed by the previous command/ ターミナル1: ^C (ctrl + C) 次に、CPUを100%燃焼させるサブシェルを取得します。 …


7
echoとcatの実行時間にこのような違いがあるのはなぜですか?
回答この質問は、私は別の質問をさせて: 私は、次のスクリプトは、同じことを行う2つ目は、最初のものを使用しているため、はるかに高速であるべきと思ったcat何度もファイルを開く必要がなく、二つだけのファイルを開きます一度だけ変数をエコーし​​ます: (正しいコードについては、更新セクションを参照してください。) 最初: #!/bin/sh for j in seq 10; do cat input done >> output 第二: #!/bin/sh i=`cat input` for j in seq 10; do echo $i done >> output 入力は約50メガバイトです。 しかし、2番目の方法を試したときは、変数のエコーiが大規模なプロセスだったため、遅すぎました。また、2番目のスクリプトで問題が発生しました。たとえば、出力ファイルのサイズが予想よりも小さかったです。 私はまたのmanページを確認echoし、catそれらを比較します: echo-テキストの行を表示します cat-ファイルを連結し、標準出力に出力します しかし、違いはありませんでした。 そう: なぜ2番目のスクリプトでcatがとても速く、エコーがとても遅いのですか? それとも変数の問題ですiか?(そのマニュアルページで echoは「テキスト行」と表示されると言われているので、i。のような非常に長い変数ではなく、短い変数に対してのみ最適化されていると思います。しかし、それは単なる推測です。) そして、使用するときに問題が発生したのはなぜechoですか? 更新 間違って使用するseq 10代わりに使用しました`seq 10`。これは編集されたコードです: 最初: #!/bin/sh for j …

3
「sudo:source:コマンドが見つかりません」
$ source /etc/environment $ sudo source /etc/environment [sudo] password for t: sudo: source: command not found bash実行するために実行されるものとは異なるシェルがありsource /etc/environment、そのシェルにはsource組み込みのものがないようです。 しかし、私とルートのデフォルトシェルは両方bashです。 $ echo $SHELL /bin/bash sudoIndeedsが別のシェルを使用している場合、なぜですか?slmの返信を見ましたが、私の場合はわかりません。
15 shell  sudo 

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