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

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

4
evalを使用してスペースを含む値をbashの変数に割り当てる方法
を使用して変数に値を動的に割り当てたいeval。次のダミーの例が機能します。 var_name="fruit" var_value="orange" eval $(echo $var_name=$var_value) echo $fruit orange ただし、変数値にスペースが含まれevalている場合$var_value、二重引用符で囲まれていてもエラーを返します。 var_name="fruit" var_value="blue orange" eval $(echo $var_name="$var_value") bash: orange : command not found これを回避する方法はありますか?
19 bash  shell  quoting 

3
readarray(またはパイプ)の問題
私はreadarrayコマンドの奇妙な振る舞いに固執しました。 man bash状態: readarray Read lines from the standard input into the indexed array variable array しかし、これらのスクリプトは機能しません(配列は空です): unset arr; (echo a; echo b; echo c) | readarray arr; echo ${#arr[@]} unset arr; cat /etc/passwd | readarray arr; echo ${#arr[@]} そして、これらの仕事: unset arr; readarray arr < /etc/passwd ; echo ${#arr[@]} unset …
19 bash  pipe 


9
複数の変数が設定されているかどうかをテストします
スクリプトの特定のポイントで、source構成ファイルを作成した後、いくつかの変数が設定され、設定されていない場合は実行を停止し、不足している変数についてユーザーに通知するようにします。私が試してみました for var in $one $two $three ; do ... ただし、たとえば$two設定されていない場合、ループは実行されません$two。次に試したのは for var in one two three ; do if [ -n ${!var} ] ; then echo "$var is set to ${!var}" else echo "$var is not set" fi done しかし、2が設定されていない場合、「2は設定されていません」ではなく、「2が設定されています」と表示されます。 必要な変数がすべて設定されていることを確認するにはどうすればよいですか? 更新/解決策:「set」と「set、but empty」に違いがあることを知っています。私は今(/programming//a/16753536/3456281とこの質問への回答のおかげで)以下を使用しています: if [ -n "${!var:-}" ] ; …

5
パイプは変数を割り当てます
簡単にするために、次のことを行います。 echo cart | assign spo; echo $spo 出力:カート そのようなassignアプリケーションは存在しますか? 置換を使用してこれを行うすべての方法を認識しています。
19 bash  variable 

4
シェルプロンプトでUpを押すと、同じプレフィックスを持つ前のコマンドを検索します
FreeBSDの世界から来て、私は基本的にあなたが入力すると、FreeBSDの1、特に9.1バージョンのようなLinuxのターミナル振る舞いをしたいcdの端末で、矢印「アップ」を押して、あなたと歴史始めにすべてのコマンドを閲覧することができcdますせています多くの時間を稼ぎます。 Linux DebianやCentOSでこの機能を有効にして、全体を入力するように強制する方法がわかりません。誰か助けてください。

3
.svn /ディレクトリを無視して、残りを除く特定のファイルを再帰的にrsync
rsync一部のファイルを共有から別のファイルにコピーするために使用しています。 再帰的に、私はする必要があります: コピー元から削除されたコピー先のファイルを削除する 同期.phpと.jsファイルのみ 他のすべてのファイルタイプを除外する .svn/宛先のディレクトリを削除しないでください これを使用する場合: rsync -zavC --delete --include='*.php' --include='*.js' --exclude="*" \ /origin /destination その後、フォルダーだけでなくすべてのファイルが除外されるrsyncためexclude="*"、再帰的ではありません。 追加する--include="*/"と、.svn/ディレクトリが削除されます(これも含まれます)。 このマインドブラストのジレンマをどのように解決できますか? uname -a: Linux tux 3.9.2-1-ARCH#1 SMP PREEMPT Sat May 11 20:31:08 CEST 2013 x86_64 GNU / Linux rsync バージョン: rsync 3.0.9-6

2
ヌル合体方式でのシェル変数の設定
私は、「ヌル合体」が本当に好きです。そこでは、変数を、物事のリストの最初の「非ヌル」値に設定できます。たとえば、多くの言語がこれをサポートしています。 C#: String myStr = string1 ?? string2 ?? "default"; JavaScript: var myStr = string1 || string2 || "default"; ...等。変数を設定するためにこれをBashで実行できるかどうか興味がありますか? 擬似: MY_STR=$ENV{VAR_NAME}??$ANOTHER_VAR??"default";
19 bash  shell  variable 

8
スリープコマンドなしで、bashでビジーな待機を避ける
次のことを行うことで、bashでtrueになる条件を待つことができます。 while true; do test_condition && break sleep 1 done ただし、反復(スリープ)ごとに1つのサブプロセスを作成します。私はそれらを避けることができます: while true; do test_condition && break done ただし、多くのCPUを使用します(ビジー待機)。サブプロセスと忙しい待機を避けるために、私は以下の解決策を思いつきましたが、それはいです: my_tmp_dir=$(mktemp -d --tmpdir=/tmp) # Create a unique tmp dir for the fifo. mkfifo $my_tmp_dir/fifo # Create an empty fifo for sleep by read. exec 3<> $my_tmp_dir/fifo # Open the fifo for …

4
letまたはexprが0と評価されると、bash -eは終了します
-eを設定するbashスクリプトがあるので、スクリプトは終了ステータス!= 0で終了します。 変数に割り当てられた基本的なシェル算術演算を実行しようとしていますが、式が0に等しい場合があり、letまたはexprコマンドの終了ステータスが「1」になります。 以下に例を示します。 #!/bin/bash -ex echo "Test 1" Z=`expr 1 - 1` || true echo "Z will print" let "A=4 - 4" echo "A WILL NEVER PRINT $A" Y=`expr 1 - 1` echo "Y WILL NEVER PRINT $Y" X=$(expr 2 - 2) echo "X WILL NEVER PRINT $X" 出力は次のとおりです。 …

2
Bashは新しいユーザーには完全に機能しません
useradd -d /home/users/john -m john(Ubuntu 11.04を使用)を使用して、システムに新しいユーザーを作成しました。これはうまくいきましたが、に変更したときjohn、私のbashは完全に機能していません。つまり、オートコンプリートがなく、矢印キー(たとえば、UPを使用して最後のコマンドを取得する)を使用できず、現在のディレクトリを表示するのではなく、表示するだけ$です。をロードしました.bashrcが、これは完全に無視されているようです。何がこれを引き起こす可能性がありますか? PD:このユーザーはすでにシステムで作業しているので、可能な場合は削除せずに再度追加します。
19 bash  users  useradd 

3
bashタブの補完を無効にする
タブを押すとbashのオートコンプリートを無効にすることは可能ですか? 私がこれをしたいのは、インデントに多くのスペースの代わりにタブ文字を使用するエディターから端末にコードを貼り付けることが多いからです。 いいえ、タブの代わりにスペースを使用するように説得することはできません。

2
.bashrcは上書きされますが、まだソースされています—どのように回復できますか?
通常、エイリアスを作成したいコマンドを見つけたら、次のように.bashrcにエコーします。 [up button pressed to last command, then line edited so that it reads] $echo "command-i-just-did" >> ~/.bashrc これを行うより良い方法があるかもしれません。しかし、とにかく、たった今、単一のシェブロンを使用して.rcファイル全体を上書きしました。ただし、.bashrcはまだ最新であるため、古いエイリアスを受け入れています(もちろん、今のところ)。それを回復する方法はありますか?

6
Linuxでbashが標準になっているのはなぜですか?
最新のLinuxディストリビューションには、デフォルトのシェルとしてbashが含まれていますが、他の(おそらく)より良いシェルもあります。 これは、誰も変更したくない歴史的な残り物なのか、bashを最初の選択とする正当な理由があるのか​​を理解しようとしています。
19 linux  bash 

3
対話型シェルでパスの一部を削除する方法は?
パスの1つのコンポーネントを削除するためのショートカットがbashとzshにありますか?たとえば、を入力ls ~/local/color/し、カーソルが行末にある場合color/、末尾に削除するショートカットはありますか?理想的には、viモードとemacsモードの両方のソリューションが必要です
19 bash  shell  zsh 

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