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

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

5
「検索」の結果をファイルのリストとして渡す方法は?
状況としては、mpg321ファイルのリストを引数として受け入れるMP3プレーヤーがあります。私は「music」という名前のディレクトリに音楽を保存します。このディレクトリにはさらにいくつかのディレクトリがあります。全部プレイしたいので、 mpg321 $(find /music -iname "*\.mp3") 。問題は、一部のファイル名に空白が含まれていて、プログラムがそれらの名前を小さな部分に分割し、欠落しているファイルについて文句を言うことです。の結果をfind引用符で囲む mpg321 "$(find /music -iname "*\.mp3")" すべてが1つの大きな「ファイル名」になりますが、これは明らかに見つかりません。 どうすればこれを行うことができますか?それが重要であれば、私はを使用bashしていますが、zshすぐに切り替えます。

1
コマンドとそのオプションへの引数として中括弧{}の使用
例 私は最近{}、開始括弧と終了括弧の間に何もない、括弧のペアをコマンドの引数として、さらにはオプションの引数として使用する例を見つけました。 cat foo | xargs -I{} echo {} find . -size 0 -exec rm -i {} \; ドキュメントなし 私の問題は、上記の例のようなコンテキストでのの使用法を説明するドキュメントがGNU Bashマニュアルに見つからないこと{}です。 のようにパラメータ展開では、括弧が括弧で囲まれている必要があるため、これはパラメータ展開ではないと思います${}。 これはブレース展開にすることもできません。なぜなら、それは{x..y[..incr]}、where の形式をとっており、オプションxでyはないからです。 また、は引数として使用されるため、コマンドグループにすることもできません{}。 ご質問 括弧で囲まれたペアは、{}それを受け入れるコマンドの引数として、一般的にどういう意味ですか? {}引数の使用法を説明したドキュメントはどこにありますか?
11 bash  shell 

2
posixシェル:環境変数名のリストを出力します(値なし)
複数の実装で機能するposix互換の方法で、現在定義されている環境変数のリストをそれらの値なしで出力するにはどうすればよいですか? 一部の実装(mksh、freebsd / bin / sh)では、export単独で使用するだけで十分です。 $ export FOO2 FOO ただし、他の一部の実装(bash、zsh、dash)ではexport、値も表示されます。たとえば、bashの場合: $ export export FOO2='as df\ asdk=fja:\ asd=fa\ asdf' export FOO='sjfkasjfd kjasdf:\ asdkj=fkajdsf:\ :askjfkajsf=asdfkj:\ safdkj' $ printenv | sed -n l FOO2=as\tdf\$ asdk=fja:\$ asd=fa\$ asdf$ FOO=sjfkasjfd kjasdf:\$ asdkj=fkajdsf:\$ \t:askjfkajsf=asdfkj:\$ safdkj$ 他のオプションのような、envまたはprintenv値のない変数名のみを出力するオプションはありません。少なくとも、私が試したlinuxおよびfreebsdプラットフォームではそうではありません。 awk / sed / etcへのパイピング。または、パラメーター展開手法(例:)を使用してリストをトリミングする${foo%%=*}こともできますが、行をまたがる可能性が=あり、値に空白が含まれる可能性がある値を処理する必要があります(上記の例を参照)。 特定のシェル実装に固有の回答は興味深いですが、私は主に実装間で互換性のあるものを探しています。

6
改行で終わらないかもしれない行指向のファイルを読む
/tmp/urlFile各行がURLを表すという名前のファイルがあります。次のようにファイルから読み取ろうとしています: cat "/tmp/urlFile" | while read url do echo $url done 最後の行が改行文字で終わっていない場合、その行は読み取られません。なんでかしら? 新しい行で終わるかどうかに関係なく、すべての行を読み取ることはできますか?

1
テキストを列にフォーマットする
以下に示すように、2つの列を持つファイルがあります(例)。 ファイル1: John 1 Peter 2 Michael Rod 3 Su 7 Louise 9 これをフォーマットする必要があり、予想される出力は次のようになります。 ファイル1: John 1 Peter 2 Michael Rod 3 Su 7 Louise 9

2
シェルスクリプトがソースにするファイル拡張子の公式の標準/規則
実行する代わりにソースしたいシェルスクリプトのファイルタイプ拡張子に規約があるかどうか疑問に思いました。例えば: このスクリプトをサブシェルで実行する場合。 ./script.sh 現在のシェルからこのスクリプトを実行することを覚えておきたい場合。 . script.source 2番目の例のファイルタイプには(POSIXなどの)規則がありますか?.sourceまたはのような何か.sourceme? 更新 この質問はいかなる意見についても尋ねるものではありません。この種のスクリプトに標準化されたファイル拡張子があるかどうかを知りたいと明確に述べました。この質問は、同様の問題についてよく寄せられるこの質問よりも意見ベースではありません(bashスクリプトには.shまたは.bash拡張子を使用しますか?)。

3
サブシェルを使用せずにシェルコマンド置換を実行することは可能ですか?
サブシェルを使用せずにコマンド置換を要求するシナリオがあります。私はこのような構成を持っています: pushd $(mktemp -d) 次に、一時ディレクトリを一度に終了して削除します。 rmdir $(popd) ただしpopd、ポップされたディレクトリが返されない(新しい現在の現在のディレクトリが返される)ため、およびサブシェルで実行されるため、これは機能しません。 何かのようなもの dirs -l -1 ; popd &> /dev/null ポップされたディレクトリを返しますが、次のようには使用できません。 rmdir $(dirs -l -1 ; popd &> /dev/null) これはpopdサブシェルにのみ影響するためです。必要なのは、これを実行する機能です。 rmdir { dirs -l -1 ; popd &> /dev/null; } しかし、それは無効な構文です。この効果を達成することは可能ですか? (注:一時ディレクトリを変数に保存できることはわかっています。そうする必要をなくし、プロセスの中で何か新しいことを学ぼうとしました!)
11 shell  directory 

1
zshのエイリアス、関数、変数の名前を一覧表示します
zshでエイリアス、関数、変数、配列の名前(本文/コンテンツ/値なし)をリストする方法が必要です。最適には次のように動作するはずですcompgen: compgen -a # will list all the aliases you could run. compgen -A function # will list all the functions you could run. compgen -A variable # will list all the variables defined. バックグラウンド env_parallel.zshを開発するためにこれが必要です:https ://www.gnu.org/software/parallel/env_parallel.html
11 shell  zsh 

3
Windows環境変数PATHEXTに相当するUnixはありますか
Windows環境変数に相当するUnixがあるかどうか疑問に思っていますPATHEXT。 Windowsの背景がない場合:PATHEXTcmd.exeにそのサフィックスを入力せずにスクリプトを実行できるようにするファイルサフィックスを追加します。たとえば、私のWindowsコンピューターでは、PATHEXTにサフィックスが含まれており.pl、cmd.exeでPerlスクリプトを実行したい場合は、単に入力するだけでmy-script実行されます。それでも、bashで同じスクリプトを実行するには、完全な名前を記述する必要がありますmy-script.pl。 私は現在WindowsとUnixの両方で作業しているため、ほとんどの場合、Unixボックスに再び行くときにサフィックスを入力するのを忘れるという罠に陥ります。

4
すべての数値をJSONで引用符で囲みます
数値を含むJSONデータがあります。すべての数値を文字列に変換する方法は?(引用符で囲む) 例: { "id":1, "customer":"user", "plate":"BMT-216-A", "country":"GB", "amount":1000, "pndNumber":20000, "zoneNumber":4 } なるはず { "id":"1", "customer":"user", "plate":"BMT-216-A", "country":"GB", "amount":"1000", "pndNumber":"20000", "zoneNumber":"4" }
11 shell  json  jq 


4
作業ディレクトリごとに履歴を保持する(シェルセッションごとに参照)
最新のシェルの履歴機能をパスにスコープする方法はありますか? 私の作業コンテキストは、ファイルシステム上のパスとして分割され、繰り返し発行されるコマンドなどのシェルアクティビティのパターンは、各「プロジェクト」で異なる傾向があります。履歴機能を現在のパス(またはサブパス)から発行されたコマンドにスコープできると便利です。

1
シェル内のすべてのbtrfsファイルシステムとサブボリュームをリストする
Cに頼らずに、つまりPOSIXシェルで、すべてのbtrfsファイルシステムのサブボリュームに関する情報を取得する便利な方法はありますか? /sys/fs/btrfsファイルシステムに関する情報のみが含まれ、サブボリュームには何も含まれないため、現在私はすべてのファイルシステムを一時フォルダーにマウントし、でスキャンしてbtrfs subvol list、結果の出力を解析しています。言うまでもなく、それはかなり醜いです。 これは3.16.xカーネルとbtrfs-progs v3.14.1(標準の Ubuntu 14.10から)を使用しています。 以下は、私が現在使用している(醜い)スクリプトです。純粋なCを使用して必要な情報を取得できることはわかっています。おそらくそれが最終的に行うことですが、もっとシンプルでエレガントな方法があるかどうか疑問に思っていました。 #!/bin/bash for i in /sys/fs/btrfs/*[!features]; do device="/dev/$(basename $i/devices/*)" mountpoint=/var/lib/btrfs/tmp/mnt/$(basename "$i") [ -d "$mountpoint" ] || mkdir "$mountpoint" grep -qs $mountpoint /proc/mounts [ $? -ne 0 ] && mount -v "$device" "$mountpoint" while read -r subvol; do # whatever you want done …
11 shell  btrfs 

2
`du`コマンドで特定の拡張子の合計ファイルサイズのみを表示する方法
ディレクトリに何百ものpdfファイルとhtmlファイルがあります。そして、私はPDFファイルの合計サイズを知りたいです。 コマンドでdu -ch /var/foo合計ファイルサイズを確認できますが、必要なのは最後の行の合計サイズだけです。 ディレクトリにpdfファイルのみが含まれている場合、-sオプションを使用できますが、今回はオプションを使用できません。 特定のファイルタイプの合計サイズのみを取得するにはどうすればよいですか?

4
コマンドのバックグラウンドでパイプされたシーケンス内の任意のコマンドのPIDを取得します
でbash、私が実行すると: cmd1 | cmd2 | ... | cmdi | ... | cmdn & どこcmd{1..n}明瞭ではないかもしれないが、どのように私はのPIDを得るのですかcmdi?または、cmdiプロセスにどのように通知できますか?(例えば、それを送信SIGUSR1?) pkill/ pgrep、pidofなどの良い答えのように見ていない、の他のインスタンスので、cmdi多分、実行している同じパイプラインの一部として含みます。jobs -pのPID cmd1を私に与えます。 iの何でもかまいません{1..n}。
11 bash  shell  pipe  job-control 

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