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

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

1
STDERRの前にSTDOUTを表示しますか?
私はbashを./fff使い始めたばかりですが、生涯、特定のコマンドを実行する方法を理解することはできません。標準エラー出力の前に、標準エラー出力をstderrの前に出力してください(自分自身の意味について混乱しています)。 例えば $ printf "I am a\ndrill\n" > fff; $ cat fff nofile fff nofile fff I am a drill cat: nofile: No such file or directory I am a drill cat: nofile: No such file or directory I am a drill 次のように印刷する必要があります: I am a drill I am a …

3
文字列変数によるシェルコマンドの保護
プログラミング言語内で、単純なシェルコマンドを実行します cd var; echo > create_a_file_here varが、私は、ファイル「create_a_file_here」を作成したい場所に(たぶん)ディレクトリの文字列を含む変数であること。これで、誰かがこのコード行を見つけた場合、たとえば、次のコードを割り当てることにより、コードを悪用することが可能です。 var = "; rm -rf /" 物事はかなり醜くなります。上記のケースを回避する1つの方法は、「;」などの特殊文字をvarの文字列で検索することです。シェルコマンドを実行する前に、これはおそらくすべてのエクスプロイトをカバーしているとは思いません。 「cd var」がディレクトリのみを変更し、それ以外は変更しないようにするための良い方法を知っている人はいますか?

10
Bash:IPv4アドレスの4つのセクションの1つを抽出します
構文${var##pattern}を使用して${var%%pattern}、IPv4アドレスの最後と最初のセクションを抽出できます。 IP=109.96.77.15 echo IP: $IP echo 'Extract the first section using ${var%%pattern}: ' ${IP%%.*} echo 'Extract the last section using ${var##pattern}: ' ${IP##*.} パラメータ拡張を使用してIPv4アドレスの2番目または3番目のセクションを抽出するにはどうすればよいですか? これが私の解決策です:配列を使用してIFS変数を変更します。 :~/bin$ IP=109.96.77.15 :~/bin$ IFS=. read -a ArrIP<<<"$IP" :~/bin$ echo ${ArrIP[1]} 96 :~/bin$ printf "%s\n" "${ArrIP[@]}" 109 96 77 15 また、私は使用して、いくつかのソリューションを書かれているawk、sedとcutのコマンドを。 さて、私の質問は:配列とIFS変更を使用しないパラメーター拡張に基づくより簡単な解決策はありますか?

4
ISO日付形式のps出力?
この出力をlstart(プロセスの開始)で並べ替えたい: ps -eo lstart,pid,cmd lstartをYYYY-MM-DD HH:MM:SSのようなISO形式で出力する方法はありますか? しかし、並べ替えだけでは解決しません。ISO日付形式にしたいのですが。
9 shell  date  ps 

1
$ PWDの語源
の語源は$PWD何ですか?頭字語ですか? pwd作業ディレクトリを出力するコマンドがあることは知ってい$CWDますが、シェル変数にはデータを出力するのではなくデータが含まれているため、現在の作業ディレクトリの変数に名前を付ける方が理にかなっています。
9 shell  history  pwd 

1
envの出力で確認できる変数を出力できないのはなぜですか?
別のシェルインスタンスの環境変数を設定することに興味があります。だから私はいくつかの研究を行うことにしました。これについてのいくつかの質問を読んだ後、私はそれをテストすることにしました。 2つのシェルAとB(PID 420)を生成し、どちらもを実行していzshます。シェルAIから以下を実行しました。 sudo gdb -p 420 (gdb) call setenv("FOO", "bar", 1) (gdb) detach シェルBから実行するenvと、変数FOOが実際にbarの値で設定されていることがわかります。これにより、シェルBの環境でFOOが正常に初期化されたと思います。ただし、FOOを印刷しようとすると、設定されていないことを示す空の行が表示されます。私には、ここには矛盾があるように感じます。 これは私自身のArch GNU / LinuxシステムとUbuntu VMの両方でテストされました。またbash、変数がenvに表示されない場所でもテストしました。これは私には失望しますが、シェルがスポーン時にその環境のコピーをキャッシュし、それだけを使用する場合は理にかなっています(リンクされた質問の1つで提案されていました)。これはまだzsh変数を見ることができる理由には答えません。 echo $FOO空の出力はなぜですか? 編集 コメントへの入力後、もう少しテストを行うことにしました。結果は以下の表で確認できます。最初の列は、FOO変数が注入されたシェルです。最初の行には、その下に出力を表示できるコマンドが含まれています。変数FOOは次を使用して注入されました:sudo gdb -p 420 -batch -ex 'call setenv("FOO", "bar", 1)'。zsh:に固有のコマンドzsh -c '...'もbashを使用してテストされました。結果は同じであり、簡潔にするためにそれらの出力は省略されました。 Arch GNU / Linux、zsh 5.3.1、bash 4.4.12(1) | | env | grep FOO | echo $FOO …

1
エコーコマンドによるキャリッジリターン
\r以下のようにオプション(復帰)付きのエコーコマンドを練習していました。 echo -e "This is \r my college" 出力: my college \r次のように前に単語をもう1つ追加すると echo -e "This is the \r my college" 次に、次のような出力が得られます。 my college the もう一つの例 echo -e "This is \r valid data" valid data echo -e "This is not a \r valid data" valid data a それで、ここで改行の実際の目的は何ですか?
9 shell  echo  newlines 


3
このフォームは何ですかvariable = $(…)
次の意味は何ですか。 basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") 私はこの部分に特に興味があります: varible=$(...) 括弧がサブプロセスの実行に使用されていることは知っていますが、括弧を一緒に使用すると$どうなりますか?
9 shell 



4
リダイレクトが失敗した場合、bashプログラムは実行されません
bashでは、リダイレクトを使用するコマンドが失敗すると、それより前に実行されていたプログラムは実行されないことに気づきました。 たとえば、このプログラムはファイル "a"を開き、50バイトをファイル "a"に書き込みます。ただし、権限が不十分なファイル(〜root / log)へのリダイレクトを指定してこのコマンドを実行しても、「a」のファイルサイズは変更されません。 $ ./write_file.py >> ~root/log -bash: /var/root/log: Permission denied cdal at Mac in ~/experimental/unix_write $ ls -lt total 16 -rw-rw-r-- 1 cdal staff 0 Apr 27 08:54 a <-- SHOULD BE 50 BYTES プログラムが実行され、すべての出力がキャプチャされ(ファイル "a"にも書き込まれる)、その後、出力が〜root / logに書き込まれなくなると考えられます。代わりに、プログラムは実行されません。 これはなぜですか、またbashはプログラムを実行する前に実行する「チェック」の順序をどのように選択するのですか?他のチェックも実行されますか? PS私は、「許可が拒否された」ファイルにリダイレクトされたときに、cronで実行されているプログラムが実際に実行されたかどうかを確認しようとしています。

1
`\ time`、` t \ ime`、 `\ cd`は実際には何をしますか?(シェルのバックスラッシュで楽しい)
/usr/bin/timeと組み込みシェル(bashとzsh)の違いについて議論している間time、誰かが\timeを取得するための省略形として使用できると述べました/usr/bin/time。 最初は無害なショートカットのように見えましたが、次にいくつかの質問が浮上しました。 なぜうまくいくのt\imeか? ¹ は\cd変更/usr/bin/cdしないのに、なぜディレクトリを変更するのですか? したがって、明らかに、\fooと同等ではありません$(which foo)。質問は今です: \foobashとzshの両方で観察された動作は、シェルのPOSIX定義によって何らかの方法でカバーされていますか?そうである場合、それが動作するのはなぜですか? 脚注1:/usr/bin/cd私のシステムでは、 #!/bin/sh builtin cd "$@"

5
ファイル内の行を2つにグループ化する方法は?
次のようなテキストファイルがあります。 a b c d e f g これらの行をグループ化して、次のような出力を取得するにはどうすればよいですか。 a-b b-c c-d d-e e-f f-g これはシェル(sh、csh、bash)で行う必要があります。 私はこれを見つけました: cat file | xargs -n2 しかし、最初のグループの最後の要素は、2番目のグループの最初の要素にはなりません。

2
以降、新しいエイリアスは使用できません。
今までは、シェルのセミコロンは(どういうわけか)改行と同じ意味だと思っていました。だから私はそれに驚いた alias <name>=<replacement text>; <name> <name>次の行で知られていますが、不明です。csh、tcsh、sh、kshとbash同じように動作。少なくともcshエイリアスが直接使用されているか、スクリプトがsemccolonの前に供給されているかは問題ではありません。エイリアスは後ではわかりません;が、次のコマンドラインではわかります。これはバグですか、それとも意図された動作ですか?
9 shell  alias 

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