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

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

1
SSHセッションでのBashオートコンプリート
SSHからマシンにログインしているとき、bashはコマンドをオートコンプリートしたくないようです(今のところ私を困らせているのはapt-getのオートコンプリートではありません)。bashがsshセッション内でオートコンプリートできるようにする設定はありますか?

3
bash PS1セットアップ
PS1を次のように構成しようとしています。 緑= "\ [\ e [32; 1m \]" 赤= "\ e [0; 31m" Purple = "\ e [0; 35m" STARTCOLOR = "\ [\ e [40m \]" ENDCOLOR = "\ [\ e [0m \]" export PS1 = "$ STARTCOLOR $ Green \ u @ $ Purple \ h $ Red \ …
9 bash  prompt 

1
stdinをbashスクリプトに渡し、そのbashスクリプトで呼び出されるpythonスクリプトに渡したい
filestdin経由でコンテンツをフィードしたいpythonスクリプトを呼び出すbashスクリプトがあります。次のようにbashスクリプトを呼び出します。 ./script.sh < file そしての内容script.sh: #! /usr/bin/env bash pushd /some/python/virtual/environment/working/dir source venv/bin/activate python main.py ?????? deactivate popd bashスクリプト??????にfile与えられた内容をstdinとして pythonスクリプトに渡すために何を入力すればよいかわかりませんmain.py。 注fileかなりのテキストファイルとのbashのを使用することができるreadではないが望ましいです。 bashスクリプトを呼び出すときにstdinを使用する必要があります。私は何にでも渡すために柔軟ですmain.py。 この難問に取り組む方法はありますか? 添加 @casの回答から、どのコンテキストで使用するかについても説明する必要があることがわかりましたscript.sh。 の転送スクリプトscript.shとして使用したいのですが、内容は次のとおりです。~/.forward |/path/to/script.sh どの接尾辞がとして呼び出され/path/to/script.shますか。ログはそれについて明確です。次のような、シンプルなバージョンのpythonスクリプトを使用した簡単なテスト: |/path/to/simple/main.py postfixがmain.py標準入力のメールの内容で呼び出すことを示します。しかし、この組み合わせは機能していないようです。

1
複合コマンドでのbashオプションの設定
extglob複合化合物内でシェルオプションを設定すると、後続のアンチグロブが失敗することがわかりました。シェルオプションは、複合コマンドの外部で設定する必要がありますか?私はbashのmanページにそのような要件の兆候を見ませんでした。 例として、次のスクリプトは正常に機能します(prints a.0 a.1)。 #!/bin/bash touch a.0 a.1 \ a.b.0 a.b.1 shopt -s extglob ls "a."!(b*) ただし、最後の2行が複合コマンドとして実行されると、スクリプトは次のエラーで失敗します。 syntax error near unexpected token `(' ` ls "a."!(b*)' これは、4.2から4.4までのbashバージョンを使用して、さまざまな複合コマンドでテストされました。 (1)条件付き- if #!/bin/bash touch a.0 a.1 \ a.b.0 a.b.1 if true; then shopt -s extglob ls "a."!(b*) fi (2)ブレース- { } #!/bin/bash touch …
9 bash  shopt 

1
連想配列をパラメーターリストとしてスクリプトに渡す
スクリプトには、次のような連想配列があります。 declare -A VARS=( ["key1"]="value1" ["key2"]="value" ) それをフォームのパラメータリストに変換する単一のコマンドはありますか --key1=value1 --key2=value2 手動で書き直す必要なし --key1="${VARS[key1]}" --key2="${VARS[key2]}" 私が考えていたユースケースは、次のように、パラメータのリストとして配列をスクリプトに渡すことでした。 my_script.sh $(to_param_list $VARS) @Kusalanandaの回答で行ったコメントをさらに詳しく説明すると、私の正確な使用例は次のとおりです。makeselfを使用して自己解凍インストーラーをビルドするために使用するスクリプトがあり、このスクリプトは、次のように分離されるパラメーターを受け取ります。 スクリプト自体のパラメーター 自己解凍インストーラー内のインストーラーのパラメーター 次に、スクリプトは次のようにインストーラーをビルドします。 to_param_list installer_param_list installer_param_array ./makeself ./path/to/sourcedir ./path/to/created/installer "My installer" ./path/to/install/inside/package "${installer_param_list[@]}" ただし、パッケージ内の非常に単純なインストーラースクリプトを使用してパラメーターの受け渡しをテストしました。 while ! -z "$1" ; do echo "$1" shift done 次のような配列を渡します: installer_param_array=( ["upgrade-from"]="19 .2.0" ["upgrade-to"]="19.3.0" ) この出力結果: --upgrade-to=19.3.0 …

1
なんらかのネガティブエコーを使用して、以前のエコーと同じ場所にコンソールで何かを印刷します
bashでは、clearすべての画面コマンドをクリアするという名前のコマンドをキャストできます。 そして、echoあなたはあなたが望むものを画面上に印刷することができます。 私の単純なスクリプトでは、コマンドで行われていることの割合を出力する必要があることがよくあります。 だから私は何かをすることができました... echo "89%" echo "90%" echo "91%" 等々.. 私が嫌いなのは、画面がパーセント更新でいっぱいになることです... 89% 90% 91% ... bashまたはphpエコーでエコーできる特別な文字の組み合わせ(たとえば、「\ 033 [01; 31m」)があるかどうかを確認し、コンソールに「最後に印刷された文字を削除する」と伝えます。 次のようなものを使用してそうします:(phpの例) echo str_repeat($neg_character, strlen($last_percentage_update_string)); echo $new_percentage_update_string; 画面に行をいっぱいにせずに、新しい文字列を前の文字列の正確な位置に印刷します それ以外の場合は、常にbashおよびphpスクリプトを使用して他の方法で同じことを行う方法を探します(少なくともdebian9コンソールとphp7で実際の実際の例を含めてください)
9 linux  bash  php  console 

3
readによって駆動されるwhileループ内でプロンプトとしてreadを使用しますか?
各反復の開始時に複数の変数を読み取り、ユーザーからの入力をループに読み込む必要があるユースケースがあります。 私が探索する方法がわからない解決策への可能な道- 割り当てには、標準入力の代わりに別のファイルハンドルを使用します for代わりにループを使用する... | while read ...... forループ内に複数の変数を割り当てる方法がわかりません echo -e "1 2 3\n4 5 6" |\ while read a b c; do echo "$a -> $b -> $c"; echo "Enter a number:"; read d ; echo "This number is $d" ; done

5
文字列の一部を認識しながら文字列を検索し、文字列を返す
たとえば、文字列があります "Icecream123 AirplaneBCD CompanyTL1 ComputerYU1" 私の文字列には必ず部分文字列IceCreamが含まれていることはわかっていますが、その後に何があるかわかりません。 それは私の例のように123かもしれませんし、何か違うかもしれません。 次のコマンドを使用して、grepを使用して文字列に「Icecream」サブストリングが存在するかどうかを検出できますが echo $string | grep -oF 'Icecream'; どちらが印刷されます Icecream 部分文字列全体を出力するコマンドを使用したいのですが、私の例では Icecream123 もちろん、アイスクリームに続くものはランダムで事前にわかっていないので、私はただ行うことができません $SUBSTRING=$(echo $string | grep -oF 'Icecream') $SUBSTRINGTRAIL=123 echo $SUBSTRING$SUBSTRINGTRAIL

1
スクリプトの履歴拡張は無効になっていますか?
次のエラーは!履歴の拡張に使用されたことが原因であると理解しています。 $ echo "Hello!Tim" bash: !Tim: event not found ただし、コマンドをスクリプトに入れてスクリプトを実行しても問題はありません。 $ cat myscript echo "Hello!Tim" $ bash myscript Hello!Tim 何故ですか?bashマニュアルに理由が記載されていますか?

4
errexitを含むすべてのシェルオプションを保存および復元する方法
シェルオプションを変更して復元する方法について、さまざまなスタック交換サイトとUNIXヘルプフォーラムで多くの質問を読みました。ここで見つけた最も包括的な質問は、「set -x」を「元に戻す」方法です。 受信した知恵は、いずれかの結果をオフに保存することであると考えられるset +oかshopt -po、その後、evalそれが後に以前の設定を復元します。 ただし、bash 3.xおよび4.xを使用した私自身のテストでは、errexitコマンド置換を行うときにオプションが正しく保存されません。 問題を示すスクリプトの例を次に示します。 set -o errexit set -o nounset echo "LOCAL SETTINGS:" set +o OLDOPTS=$(set +o) echo echo "SAVED SETTINGS:" echo "$OLDOPTS" そして出力(無関係な変数のいくつかを削除しました): LOCAL SETTINGS: set -o errexit set -o nounset SAVED SETTINGS: set +o errexit set -o nounset これは非常に危険なようです。私が書くほとんどのスクリプトはerrexit、コマンドが失敗した場合に実行を停止することに依存しています。これによって引き起こされたスクリプトの1つにバグを見つけerrexitました。最後に復元するはずの関数がそれを上書きし、スクリプトの実行中はデフォルトのオフに戻しました。 私ができることは、必要に応じてオプションを設定し、終了する前にすべてのオプションを適切に復元できる関数を作成することです。しかし、コマンド置換によって呼び出されたサブシェルでerrexitは継承されていないようです。 set +oコマンド置換を使用したり、FIFOフープをジャンプしたりせずに結果を保存する方法に困っています。からは読み取ることができますが$SHELLOPTS、書き込み可能ではないか、またはevalフォーマット可能ではありません。 サブシェル関数を使用することも選択肢の1つであることは知っていますが、その場合、出力をログに記録したり、複数の変数を返したりするために多くの問題が生じます。 おそらく関連している:https …
9 bash  shell 

1
同じスクリプトでbashと期待しますか?
.csvファイルからIPアドレスを取得し、デバイスにtelnetして「show version」コマンドの出力をキャッチするスクリプトをコーディングしようとしています。 これまでのところ私はこれをコーディングしました: #!/bin/bash #!/usr/bin/expect -f FILE1=dispositivos.csv #file with IP's and device name set Username "user" #this is the user for telnet connection. set Password "this.is.the.pass" #pass for telnet connection. NUMERODISP="$(wc -l $FILE1 | awk '{print $1}')" #this command counts number of devices (IP's) in the file as it is …


2
シェルでプロセスをデーモン化しますか?
http://linuxg.net/how-to-transform-a-process-into-a-daemon-in-linux-unix/は、bashでプロセスをデーモン化する例を示しています。 $ nohup firefox& &> /dev/null 私が正しい場合、コマンドは「nohup and background a process」と同じです。しかし、デーモンはnohuppedおよびバックグラウンドプロセス以上のものではありませんか? プロセスをデーモン化するためにここで欠落している手順は何ですか? たとえば、プロセスをデーモン化するときに親プロセスを変更する必要はありませんか?はいの場合、どのようにbashでそれを行いますか?関連する返信https://unix.stackexchange.com/a/177361/674を理解しようとしています。 他にどのようなステップと条件がありますか? 私の関連する質問を参照してくださいhttps://stackoverflow.com/q/35705451/156458
9 linux  bash  daemon 


6
猫のワイルドカード印刷で改行を強制する
複数の小さなファイル(すべてのファイルが1文)を標準出力に出力するために、bashでワイルドカードを使用した猫を使用したいと思います。ただし、個別のファイルの内容は改行で区切られていません。読みやすくするために改行します。 このコマンドにある種のファイル区切り文字を追加するにはどうすればよいですか?

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