Unix & Linux

Linux、FreeBSDおよび他のUn * xのようなオペレーティングシステムのユーザーのためのQ&A

2
このBashスクリプトを呼び出すときに、ファイル引数に引用符が必要なのはなぜですか?
私は、Bashスクリプトを作成するのは初めてです。私は、より高度で便利なスクリプトの基礎として使用した「テストスクリプト」を持っています。 #!/bin/bash files=$1 for a in $files do echo "$a" done 引用符なしでこれを呼び出すと、ディレクトリ内の1つのファイルが選択されます。 testscript *.txt しかし、引用符で呼び出すと、正しく動作し、すべてのテキストファイルが選択されます。 testscript '*.txt' ここで何が起こっていますか?

2
警告またはエラーが発生したときにプログラムの名前を出力する必要がありますか?
スクリプトまたはプログラムを作成している場合、警告またはエラーメッセージとともにその名前をstderrに出力する必要がありますか?例えば: ./script.sh: Warning! Variable "var" lowered down to 10. または: ./prog.py: Error! No such file: "file.cfg". 一般的にそれは単なる好みの問題であることを理解しています(特に自分用に自分のものを書く場合)が、それに対して慣習的なものはあるのだろうか?ほとんどのUNIX / Linuxユーティリティは何かが起こったときに名前を書くと思うので、それは良いことのように思えますが、それを行う方法としない方法についてのガイドラインや暗黙のルールはありますか? 例えば、それは下のバイナリをインストールすることをお勧めではありません/usr/bin/、むしろ下、/usr/local/bin/または何か他のもの。stderrへの出力について同様のルールはありますか?名前の後にコロンを書く必要がありますか?または単に「警告!」および「エラー!」言葉?何も見つかりませんでしたが、誰かがそれについてどこで読むかを教えてくれるかもしれません。 この質問はプログラミングの実践に関するものですが、UNIX / Linuxの伝統に関するものであり、一般的なプログラミングではないため、stackoverflowよりもこちらの方が適切だと思いました。

1
nmap-ncatのgnu-netcatの '-z'と同等のオプションは何ですか?
これを使用してスクリプトを実行する前に、サービスのリスニングポートを確認します。 until nc -z $HOST $PORT do echo "waiting for service to be available..." sleep 0.5 done exec "/my/script" 以前はgnu-netcatで動作していましたが、今ではLinuxディストリビューションをアップグレードし、/usr/bin/ncコマンドにnmap-ncatを使用しています。 nmap-ncatパッケージで使用する同等のソリューションを知りたい。
13 netcat  nmap 

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



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


1
終了しない「ヘッド」の代わりに?
最初のn行を印刷するユーティリティが必要ですが、実行を続け、残りの行を吸い上げますが、印刷はしません。実行を継続する必要があるプロセスの出力で端末を圧倒しないために使用します(結果をファイルに書き込みます)。 できると思いましたがprocess | {head -n 100; cat > /dev/null}、もっとエレガントなものはありますか?
13 head 

4
{a、b、c}がbashで展開されるのはいつですか?
を含むbashスクリプト for i in {a,b}-{1,2}; do echo $i; done プリント a-1 a-2 b-1 b-2 実行されたとき。これは私が期待したものです- {a,b}構造が拡張されているため。 ただし、(別の)スクリプトに次が含まれる場合 v={a,b}-{1,2} echo $v 印刷する {a,b}-{1,2} それは私が期待したものではありません。私はそれが印刷されると思ったa-1 a-2 b-1 b-2。明らかに、{a,b}コンストラクトは展開されません。 私はそれをそのように拡張させることができます v=$(echo {a,b}-{1,2}) これらの観察に基づいて、2つの質問があります。1){a,b}コンストラクトはいつ拡張されますか?2)$(echo {a,b}-{1,2})必要に応じて拡張をトリガーするのに好ましい方法はありますか?

1
フォルダーに入るときに一時bashエイリアスを設定する
時々、非常にカスタマイズされたbashエイリアスが必要な場合があります。また、フォルダーに入ったときにキーバインドが必要な場合もあります(CLIから多くのコマンドを入力するのに使用されるプロジェクトになる場合があります)。 "projectAlpha /"のようなフォルダに入ると、次のようなカスタムエイリアスが期待できます。 alias doTaskX='./app arg1 arg2...|filter arg1 arg2...' ... それ以上に私は考えていました: エイリアスと一般的なコマンドを示す有用なメッセージを表示する プロジェクトの一般的なカスタムキーバインドを表示する しかし、プロジェクトのルートを離れるとすぐに、これらの設定は使用できなくなります。 今日それを行うための最良のアプローチは何ですか?
13 bash  shell  alias 

3
2つのエコーコマンドの出力間の\ nを削除する方法は?
各行に1つのファイル名を含むテキストファイルがあります。 111_c4l5r120.png 123_c4l4r60.png 135_c4l4r180.png 147_c4l3r60.png 15_c4l1r120.png ... この形に変換したい: 111_c4l5r120.png 111 123_c4l4r60.png 123 135_c4l4r180.png 135 147_c4l3r60.png 147 15_c4l1r120.png 15 ... このコードを使用して: #!/bin/bash while IFS='' read -r line || [[ -n "$line" ]]; do echo "$line" >> output.txt echo "$line" | cut -d'_' -f 1 >> output.txt done < "$1" しかし、結果は次のとおりです。 111_c4l5r120.png …

2
bashの「<Esc> Kv」とは
bashでEsc、Shift+ K、+ を押すとV、bashが次のよう$EDITORなファイル名で起動します/tmp/bash-fc-186566385。 それはなぜであり、その目的は何ですか? おそらくbashを実行していることを言及する必要がありset -o viます。

5
ホスト名のIPを確認すると、「ホスト名:名前またはサービスが不明です」というエラーが表示されました
会社のクラウドサービスでUbuntu 14.04を実行しています(インスタンスにはエラスティックIPがあります)。コマンドラインで実行しているインスタンスのIPアドレスをチェックアウトしたいのですが、うまくいきませんでした。 root@ubuntu14-graphite:~# hostname ubuntu14-graphite root@ubuntu14-graphite:~# hostname -i hostname: Name or service not known 理由がわかりません。 私はubuntu14-graphiteにpingを試みましたが、それは言いました: unknown host ubuntu14-graphite. それは私のホストが存在しないということですか? 別のサーバー(クラウドインスタンスではなく、物理サーバー)があります。このサーバーにCentOS 6.7をインストールしました。ホスト名のIPをチェックしましたが、特別なものは何もありませんでした/etc/hosts。 の出力はcat /etc/hosts次のとおりです。 127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts


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