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

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

7
grepの結果のファイルを開くにはどうすればよいですか?
多くのファイルをgrepして行を見つけると、grepは1つの結果を返します。ファイル名をコピーして新しいコマンドに貼り付けるのではなく、エディターでその1つの結果を開くことができるようにします。次のようなものですgrep foo | vim。BASHでそれを行う方法はありますか?
17 bash  grep 

3
新しいtmuxセッションはbashrcファイルをソースしません
概要 新しいtmuxセッションを作成すると、プロンプトがデフォルトのbash構成からプルさsource ~/.bashrcれ、カスタマイズしたプロンプトを手動で実行する必要があります。 分析 RHEL 7マシンを使用しています。しばらく前にbashの更新後にこの動作に気づき始めましたが、今まで質問をすることはありませんでした(そして、どの更新が発生し始めたのかわかりません)。 たとえば、プロンプトを次のようにカスタマイズしました。 [user@hostname ~]$ 新しいtmuxセッションを開始するたびに、bashのデフォルトのように見えるものが使用されます。 -sh-4.2$ クイックランはsource ~/.bashrc常に問題を修正しますが、小さな問題を修正するたびにこれを行う必要があるのは面倒です。tmuxでこれを自動的に行う方法についてのアイデアはありますか? さらに情報が必要な場合は、喜んで提供します。 tmux.conf 参考のため、tmux.conf以下にファイルを示しますが、カスタムと呼ぶことはほとんどできません。 setw -g mode-keys vi # reload tmux.conf bind r source-file ~/.tmux.conf \; display-message " ✱ ~/.tmux.conf is reloaded"
17 bash  tmux 

3
jq出力をBash変数に設定する
curlを使用して、次のようにRESTのAPIからJSONを取得しています。 content=$(curl -s -X GET -H "Header:Value" http://127.0.0.1:8200/etc) echo "${content}"| jq -r '.data.value' これは私が必要とする価値を生み出します。しかしながら; 上記のコードを次のように変更すると: content=$(curl -s -X GET -H "Header:Value" http://127.0.0.1:8200/etc) username=$(echo "${content}"| jq -r '.data.value') echo $username 何も生成しません。これを変更して、username変数に出力が割り当てられるようにするにはどうすればよいですか?
17 bash  curl  json  jq 

2
ターミナルエミュレーターでAlt-Leftで単語をスキップできない
以前の仕事のDebian Wheezyマシンでは、Alt + LeftおよびAlt + Rightに慣れて、アクティブなコマンドライン(bash内)の単語間をスキップしました。 家で私はジェシー(Debianの8.0、枝をテスト)にアップグレードしたので、これはもう動作しません。代わりに前の単語にスキップする、Altキーを押しながら左は何かのように印刷しDたりします[D。OTOH、sshを開いて、私の頭のないDebian Wheezyに接続すると、完全に機能します。 さらに、Fedora 20を新しい仕事にインストールしたところ、動作は同じです。これは、bash、csh、およびksh(で始まるenv -i)、rxvt-unicode、およびxfce4-terminalに適用されるため、これらのレベル以外のものでなければなりません。 スタック内の他のどこで違いを見つける必要がありますか?

2
EmacsのようにBashでコピーしてセットマークしますか?
私は(つまり、使用して、Emacsがデフォルトで使用するのと同じキーボードバインディングを使用してバッシュで、コマンドラインのテキストをコピー&ペーストできるようにしたいC-spaceためにset-mark、M-wテキストをコピーするためにC-y、M-yなど、それを貼り付けます)。 GNU bashのドキュメントは bashがデフォルトで設定これらのキーバインディングの一部が付属していることを述べています。 たとえば、ヤンク(C-y)は私の端末ではデフォルトで機能します。ただし、コマンドset-markとcopyコマンドを機能させることはできず、デフォルトではキーにバインドされていないようです。 通常、ユーザーが独自のキーバインディングを定義できる方法は、キーバインディングをに追加すること.inputrcです。だから、私は見たドキュメントで次のbash関数を見つけ、私が望むEmacsのような振る舞いを定義するのに役立つと思います(つまりset-markwith C-spaceとcopywith M-w)。 copy-region-as-kill () リージョン内のテキストをキルバッファーにコピーして、すぐにヤンクできるようにします。デフォルトでは、このコマンドはバインドされていません。 そして set-mark (C-@) ポイントにマークを設定します。数値引数が指定されている場合、マークはその位置に設定されます。 私が正しく理解している場合、上記はcopy-region-as-killデフォルトでキーボードシーケンスにバインドされていないが、デフォルトでset-markバインドさC-@れていることを意味します。 私はC-@自分の端末で試しましたがset-mark、カーソルを動かしてもテキストがハイライトされていないので、実行するとは思いません。いずれにせよ、キーボードバインディング(M-wおよびC-)を関数内copy-region-as-killでset-mark上記の関数に 追加.inputrcしC-x C-r、それをでリロードしようとしましたが、これは機能しませんでした。.inputrc他のユーザー定義のキーバインドが定義されているため、他のエントリが動作していることを知っています。 私が間違っていることはありますか?何か不足していますか?

2
一部のUnicode文字が端末に印刷されないのはなぜですか?
Adobe Source Code Proフォントを使用した単純な端末でArch Linuxを実行しています。ロケールが正しく設定されていLANG=en_US.UTF-8ます。 トランプを表すUnicode文字を端末に印刷したい。参考としてウィキペディアを使用しています。 カードスーツのUnicode文字は正常に機能します。たとえば、発行 $ printf "\u2660" 画面に黒いハートを印刷します。 しかし、特定のトランプで問題があります。発行中 $ printf "\u1F0A1" Ἂ1スペードaceのエースの代わりにシンボルを表示します。何が悪いの? この問題は、いくつかの端末(urxvt、xterm、シロアリ)および私が試したすべてのフォント(DejaVu、Inconsolata)で持続します。
16 bash  fonts  unicode  printf 

2
`。[]。foo []`はbashで何をしますか?なぜ「..」と一致するのですか?
次を見てください: $ echo .[].aliases[] .. $ echo .[].foo[] .. $ echo .[].[] .. $ echo .[].xyz[] .. $ echo .xyz[].xyz[] .xyz[].xyz[] $ echo .xyz[].[] .xyz[].[] どうやらこれは何かをつかんでいるように見えますが、結果がどのように組み合わされるかはわかりません。私の理解で[]は、空の文字クラスです。もし直観的だとしたら 空の文字列のみに一致しました。この場合、bashはこのディレクトリ内で一致するものは何もないので、bashが完全に再現されることを期待しますが、..aliases(最初の例では) またはまったくない; この場合、bashが文字列全体を再現することも期待しています。 これは、GNU bashバージョン4.4.23(1)-releaseを使用しています。
16 bash  shell  wildcards 

4
すべてのユーザー名やホームディレクトリをリストするにはどうすればよいですか?
マシン上のすべてのユーザーを一覧表示したいのですが、通常は次のようにします: ls -l /home しかし、私は他のマシンに展開されるスクリプトでそれを使用します。おそらく、彼らはそれを自宅とは呼ばないマシン(例えばmyHome)にデプロイします。だから私はそれを一般化したいls -l ~。しかし、それはすべてのユーザーのホームディレクトリの名前ではなく、私のユーザーのホームディレクトリをリストするだけです(基本的にはマシン上のユーザー名のリストを取得したいです)。どのように一般化できますか?

1
名前に日付を含むtarファイル?
日付と時刻を名前としてファイルをtarおよびgzipしようとしています。 date=$(date '+%d-%m-%Y_%H:%M:%S'); tar -zcf "$date".tar.gz repo/bin/ しかし、私は戻ってきます: tar (child): Cannot connect to 17-08-2017_21: resolve failed tar: Child returned status 128 tar: Error is not recoverable: exiting now ここで何が起こっているのか、どうすれば修正できますか? tarはIPのように名前に接続しようとしていますか?
16 bash  tar 

2
プロセス置換出力が順不同です
の echo one; echo two > >(cat); echo three; コマンドは予期しない出力を提供します。 私はこれを読みました:プロセス置換はbashでどのように実装されていますか?インターネット上のプロセス置換に関する他の多くの記事が、なぜこのように動作するのか理解していない。 期待される出力: one two three 実際の出力: prompt$ echo one; echo two > >(cat); echo three; one three prompt$ two また、この2つのコマンドは私の観点からは同等であるはずですが、そうではありません。 ##### first command - the pipe is used. prompt$ seq 1 5 | cat 1 2 3 4 5 ##### …

3
どのシェルインタープリターがシバンなしでスクリプトを実行しますか?
アカウントのデフォルトのシェルがzshであるが、ターミナルを開いてbashを起動し、という名前のスクリプトを実行したとしますprac002.sh。どのシェルインタープリターを使用して、スクリプト、zshまたはbashを実行しますか?次の例を考えてみましょう。 papagolf@Sierra ~/My Files/My Programs/Learning/Shell % sudo cat /etc/passwd | grep papagolf [sudo] password for papagolf: papagolf:x:1000:1001:Rex,,,:/home/papagolf:/usr/bin/zsh # papagolf's default shell is zsh papagolf@Sierra ~/My Files/My Programs/Learning/Shell % bash # I fired up bash. (See that '%' prompt in zsh changes to '$' prompt, indicating bash.) papagolf@Sierra:~/My Files/My Programs/Learning/Shell$ ./prac002.sh …

8
ファイル内でバイトシーケンスが発生する回数をカウントするにはどうすればよいですか?
私が持っているファイル内で特定のバイトシーケンスが何回発生するかをカウントします。たとえば\0xdeadbeef、実行可能ファイル内でその数が何回発生するかを知りたいです。今、私はgrepを使用してそれをやっています: #/usr/bin/fish grep -c \Xef\Xbe\Xad\Xde my_executable_file (私のCPUはリトルエンディアンであるため、バイトは逆の順序で書き込まれます) ただし、アプローチには2つの問題があります。 これらの\Xnnエスケープシーケンスは、魚の殻でのみ機能します。 grepは実際に、マジックナンバーを含む行の数をカウントしています。パターンが同じ行で2回発生する場合、1回だけカウントされます。 これらの問題を修正する方法はありますか?この1つのライナーをBashシェルで実行し、ファイル内でパターンが発生する回数を正確にカウントするにはどうすればよいですか?


1
これらのbash fork爆弾の動作が異なるのはなぜですか。
通常のフォーク爆弾がどのように機能するかはわかりますが、一般的なbashフォーク爆弾の最後に&が必要な理由と、これらのスクリプトの動作が異なる理由はよくわかりません。 :(){ (:) | (:) }; : そして :(){ : | :& }; : 前者は、ログイン画面に戻る前にCPU使用率の急上昇を引き起こします。後者は代わりにシステムをフリーズさせ、ハードリブートを強制します。何故ですか?どちらも継続的に新しいプロセスを作成しますが、なぜシステムの動作が異なるのですか? また、両方のスクリプトは、 :(){ : | : }; : 似ていると思っていたとしても、問題はまったく発生しません。bashのマニュアルページには、パイプラインのコマンドはすでにサブシェルで実行されていると記載されているため、次のように信じられます。:すでに十分です。私は信じており、新しいサブシェルでパイプラインを実行する必要がありますが、なぜそんなに変わるのですか? 編集:htopを使用してプロセスの量を制限すると、最初のバリアントはプロセスの実際のツリーを作成し、2番目のバリアントは同じレベルのすべてのプロセスを作成し、最後のバリアントはプロセスを作成しないように見えましたまったく。これは私をさらに混乱させますが、おそらくそれが何らかの形で役立つのでしょうか?

7
ディレクトリツリー/ファイル名を使用する場合のコンパクトbashプロンプト
Ubuntu 14.04およびのシステムでは、次の内容で終わる変数bashがありPS1ます。 \u@\h:\w\$ プロンプトが次のように表示されるように user@machinename:/home/mydirectory$ ただし、現在のディレクトリに長い名前がある場合や、長い名前のディレクトリ内にあるため、プロンプトが次のようになる場合があります。 user@machinename:/home/mydirectory1/second_directory_with_a_too_long_name/my_actual_directory_with_another_long_name$ これは端末の行を埋め、カーソルは別の行に移動しますが、これは迷惑です。 代わりに次のようなものを取得したい user@machinename:/home/mydirectory1/...another_long_name$ PS1短いプロンプトを取得して、特定の文字数を超えないように、ディレクトリ名を「ラップ」および「コンパクト」にする変数を定義する方法はありますか?

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