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

他のBourne / POSIXシェルとは対照的に、GNUのBourne Again SHellに固有の質問。Unixシェル全般に関する質問については、代わりに/ shellタグを使用してください。

2
サブシェルは子シェルと同じです
この2つの名前があります。サブシェルと子シェルです。 はい、子プロセスは次のいずれかによって開始されます: sh -c 'echo "Hello"' ( echo "hello" ) echo "$(echo "hello") echo "hello" | cat すべて同等で、同じ名前を共有していますか?すべて同じプロパティを共有していますか? POSIXには次の定義があります。 シェル実行環境は...で構成されています。 しかし、上記のリンクの最後の段落にはこれがあります: サブシェル環境は、無視されないシグナルトラップがデフォルトのアクションに設定されることを除いて、シェル環境の複製として作成されます。 そして特に: コマンド置換、括弧でグループ化されたコマンド、および非同期リストは、サブシェル環境で実行されます。さらに、マルチコマンドパイプラインの各コマンドはサブシェル環境にあります。.... sh -c 'echo "Hello"'そこに含まれていない、それもサブシェルと呼ばれるべき?

2
スクリプトで!$を使用できませんか?
なぜこれが機能しないのかと思っているだけ #!/bin/bash ls /bin ls !$ ls /bin2回実行する予定ですが、2番目!$は解釈されなかったためエラーが発生します 私は何かを逃したのですか、それとも!$コマンドラインでのみ機能しましたか? man bash(Mac)で関連するパーツが見つかりませんでした
11 bash 

2
&6と/ dev / fd / 6の違いは何ですか?
ファイル記述子6から読み取るには、<&6or </dev/fd/6(別名/proc/self/fd/6)を使用できます。通常、どちらも同じように機能します。しかし、そのファイル記述子がたまたまソケットである場合、奇妙なことが起こります。例えば: $ bash -c 'ls -l /dev/fd/6;cat /dev/fd/6' 6</dev/tcp/localhost/12345 lrwx------ 1 michas michas 64 Jan 10 19:50 /dev/fd/6 -> socket:[315010] cat: /dev/fd/6: No such device or address ここでlsは、記述子が実際に存在することを示しています。ただし、この方法ではデータにアクセスできません。cat <&6代わりに使用すると、すべてが再びうまく機能します。 ファイル記述子にアクセスする両方の方法の違いは何ですか? 変数で番号が指定されている場合、記述子にアクセスするための良い方法はありますか?(</dev/fd/$fd動作しますが、<&$fd動作しません。) (上記の状況はLinuxでは観察できますが、OpenBSDでは観察できません。-そのファイル記述子はそこで通常の文字デバイスであるようです。)

3
bashエイリアスを拡張する方法
Bashで同じ名前の別のエイリアスを実際に拡張するエイリアスを作成する方法は? なぜ: 私は以前は次のようなことにGREP_OPTIONS着手し.bashrcていました: GREP_OPTIONS="-I --exclude=\*~" またsetup-java.sh、いくつかのJavaプロジェクトに取り組む前に呼び出すスクリプト(私たちに言っておきます)も用意しました。次の行が含まれます。 GREP_OPTIONS="$GREP_OPTIONS --exclude-dir=classes" Sassも使用する場合setup-sass.shは、次の行を含むを呼び出します。 GREP_OPTIONS="$GREP_OPTIONS --exclude-dir=\*/.sass-cache" しかし、GREP_OPTIONS廃止予定であり、どうやら標準的な解決策はエイリアスまたはスクリプトを作成することです...
11 bash  grep  alias 

1
コマンドの一部としてスペースを含むBashエイリアス
エイリアス自体にスペースがあるbashエイリアスを作成しようとしています。 考え方は、エイリアス(つまりcon)はの略ですsudo openvpn --config /path/to/my/openvpn/configs/。conエイリアスを使用すると、読み取り可能なコマンドになります。 すなわち: `con uk.conf` == `sudo openvpn --config /path/to/my/openvpn/configs/uk.conf` 次のようにエイリアスを宣言できないことを理解しています con ="sudo openvpn --config /path/to/my/openvpn/configs/"。このシナリオではbash関数は機能しますか?私はそれについて聞いたことがありませんが、このマイナーな問題の解決策を研究するとき。


5
ファイル名の日付より後にファイルが変更されたかどうかをテストする
次のように、ファイル名にYYYYMMDDで名前が付けられたファイルがあります。 file-name-20151002.txt このファイルが2015-10-02以降に変更されたかどうかを確認したいと思います。 ノート: の出力を確認することでこれを行うことができますlsが、の出力を解析することlsは悪い考えです。 特定の日付以降のすべてのファイルを見つける必要はありません。一度に1つの特定のファイルをテストするだけです。 作成後、同じ日にファイルが変更される心配はありません。つまり、この20151002名前のファイルが2015年10月3日以降に変更されたかどうかを知りたいだけです。 MacOs 10.9.5を使用しています。
11 bash  files  osx  timestamps 

5
Bash-スクリプトでホスト名を変更した後、PS1が適切なホスト名で更新されない
これは、stackoverflowからの私の投稿のコピーです。私はここでそれを尋ねるべきだったと思います... ホスト名を変更するスクリプトを実行して、適切なホスト名ですぐにbashプロンプト(PS1変数)を更新したいと思います。これを実現するにはどうすればよいですか? 私はこれを実行します #!/bin/bash # Usage: ./changehost <newhostname> #Do two sed's to edit the files for persistent hostname change sed -i s/$(hostname)/$1/g "/etc/hosts" sed -i s/$(hostname)/$1/g "/etc/sysconfig/network" #run the hostname command with new hostname to update it hostname $1 そのような端末でこれを入手する [user@host dir]# ./changehost newhostname [user@host dir]# しかし、私が欲しいのはこれです [user@host dir]# ./changehost …
11 bash  shell 

2
なぜbashはncursesにリンクするのですか?
私はこれに気づいたことがあると思いますが、あまり考えたことはありません。今私は興味があります。 > ldd /bin/bash linux-vdso.so.1 => (0x00007fff2f781000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f0fdd9a9000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f0fdd7a5000) libc.so.6 => /lib64/libc.so.6 (0x00007f0fdd3e6000) /lib64/ld-linux-x86-64.so.2 (0x00007f0fddbf6000) Libtinfoはncursesの一部です。これはfedoraシステムですが、ubuntuでも同じです。raspbian(debianバリアント)ではlibncurses自体にもリンクしています。 これの理由は何ですか?私はbashのすべてがlibreadlineで実行できると思っていました(不思議なことに、リンクされていません)。これは単にその代わりになりますか?
11 bash  readline  ncurses 



6
別のファイルで見つかった行に応じてファイルから行を削除する
ファイルfile1.txtには、次のような行が含まれています。 /api/purchase/<hash>/index.html 例えば: /api/purchase/12ab09f46/index.html ファイルfile2.csvには、次のような行が含まれています。 <hash>,timestamp,ip_address 例えば: 12ab09f46,20150812235200,22.231.113.64 a77b3ff22,20150812235959,194.66.82.11 file2.csvをフィルタリングして、file1.txtにもハッシュの値が存在するすべての行を削除します。それは言うことです: cat file1.txt | extract <hash> | sed '/<hash>/d' file2.csv またはこのようなもの。 簡単なはずですが、うまく動かないようです。 誰もがこのタスクのための作業パイプラインを提供できますか?

3
文字列からBashの「単語」の配列に移動する
文字列から、各エントリがその文字列の各単語である配列に移動する必要があります。たとえば、次のように始まります: VotePedro="Vote for Pedro" 配列が必要です: Vote For Pedro 次に私は次のように反復できるはずです: for i in "${votePedroArray[@]}" do ## Do something done

4
ネストされたループでシェルスクリプトを終了する
ネストされたループを持つシェルスクリプトがありますが、「exit」は実際にはスクリプトを終了せず、現在のループのみを終了することがわかりました。特定のエラー条件でスクリプトを完全に終了する別の方法はありますか? 許容可能なエラーがあり、多くの書き換えが必要になるため、「set -e」を使用したくありません。 現在、私はkillを使用して手動でプロセスをkillしていますが、これを行うにはもっと良い方法があるはずです。
11 bash  shell  scripting  exit 

5
bash:変数の最初の行を変数に割り当てる
複数行の変数があり、その変数の最初の行だけが必要です。次のスクリプトは問題を示しています。 #!/bin/bash STRINGTEST="Onlygetthefirstline butnotthesecond orthethird" echo " Take the first line and send to standard output:" echo ${STRINGTEST%%$'\n'*} # Output is as follows: # Onlygetthefirstline echo " Set the value of the variable to the first line of the variable:" STRINGTEST=${STRINGTEST%%$'\n'*} echo " Send the modified variable to standard output:" …
11 bash 

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