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

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


6
Bash演算子[[vs [vs(vs((?
これらの演算子がbash(括弧、二重括弧、括弧、二重括弧)で使用された場合に異なる動作をすることについて少し混乱しています。 [[ , [ , ( , (( 私は人々がこのようなifステートメントでそれらを使用するのを見てきました: if [[condition]] if [condition] if ((condition)) if (condition)
246 bash  shell  test 

8
変数が空であるか、スペースのみが含まれているかどうかをテストするにはどうすればよいですか?
次のbash構文は、param空でないかどうかを検証します。 [[ ! -z $param ]] 例えば: param="" [[ ! -z $param ]] && echo "I am not zero" 出力なしとその罰金。 ときしかし、param1つ(またはそれ以上)のスペース文字を除いて空で、そして場合は異なります。 param=" " # one space [[ ! -z $param ]] && echo "I am not zero" 「I am not zero」が出力されます。 スペース文字のみを含む変数を空と見なすようにテストを変更するにはどうすればよいですか?

5
env x = '(){:;};とは何ですか command 'bash doとなぜ安全でないのですか?
bashには明らかに脆弱性(CVE-2014-6271)があります:Bashの特別に細工された環境変数コードインジェクション攻撃 私は何が起こっているのかを理解しようとしていますが、私はそれを理解しているとは完全に確信していません。echo単一引用符で囲まれたまま実行するにはどうすればよいですか? $ env x='() { :;}; echo vulnerable' bash -c "echo this is a test" vulnerable this is a test 編集1:パッチを適用したシステムは次のようになります。 $ env x='() { :;}; echo vulnerable' bash -c "echo this is a test" bash: warning: x: ignoring function definition attempt bash: error importing function definition for `x' …

5
Bashスクリプトがエイリアスを認識しないのはなぜですか?
私の~/.bashrcファイルには2つの定義があります: commandA、これは長いパスのエイリアスです commandB、これはBashスクリプトのエイリアスです これら2つのコマンドで同じファイルを処理したいので、次のBashスクリプトを作成しました。 #!/bin/bash for file in "$@" do commandA $file commandB $file done セッションからログアウトして再度ログインした後でも、command not foundこのスクリプトを実行すると、Bashは両方のコマンドのエラーを表示します。 私は何を間違えていますか?
216 bash  alias 


3
bash / POSIXシェルで変数を引用するのを忘れた場合のセキュリティへの影響
しばらくunix.stackexchange.comをフォローしている場合はecho $var、Bourne / POSIXシェル(zshは例外)のリストコンテキスト(のように)で変数を引用符で囲まないでおくと、非常に特別な意味があり、正当な理由がない限り、実行しないでください。 ここでいくつかのQ&Aで詳細に議論されています(例:シェルスクリプトが空白または他の特殊文字でチョークするのはなぜですか?、二重引用符が必要なのはいつですか?、シェル変数の展開とグロブと分割の効果、引用符付き引用符なしの文字列展開) これは、70年代後半のBourneシェルの最初のリリース以降のケースであり、Kornシェル(David Kornの最大の後悔の 1つ(質問#7))によって変更されていないかbash、Kornシェルをほとんどコピーしたものです。 POSIX / Unixでどのように指定されているか。 現在、ここにはまだ多くの回答があり、変数が引用されていない公開されているシェルコードもときどき公開されています。あなたは今までに人々が学んだと思っていただろう。 私の経験では、変数を引用するのを省略した人が主に3種類あります。 初心者。確かにそれは完全に直感的でない構文であるため、それらは言い訳することができます。そして、彼らを教育することは、このサイトでの私たちの役割です。 忘れっぽい人。 繰り返しハンマーを打っても納得しない人、Bourneシェルの作者が私たちのすべての変数を引用するつもりはなかったと思う人。 この種の行動に関連するリスクを明らかにすれば、彼らを説得できるかもしれません。 変数の引用を忘れた場合に起こりうる最悪の事態は何ですか。それは本当にそれが悪いですか? ここでどのような脆弱性について話しているのですか? どのような状況で問題になりますか?


9
別のbashセッションで実行中のプロセスの出力を表示する方法は?
ローカルマシンで作業していたときから、リモートマシンで実行中のスクリプトを残しました。同じユーザーとしてSSH経由でマシンに接続し、スクリプトが実行されてpsいるのを確認できます。 $ ps aux | grep ipcheck myuser 18386 0.0 0.0 18460 3476 pts/0 S+ Dec14 1:11 /bin/bash ./ipchecker.sh ローカルセッションでstdoutに出力するだけです(./ipchecker.shローカルターミナルウィンドウから実行しました。リダイレクトも使用もしていませんscreen)。 とにかくSSHセッションから、この実行中のコマンドの出力を(停止することなく)表示できますか? これまでのところ、私が見つけた最高のものは使用することです。strace -p 18386しかし、私は画面上を飛び回る大量のテキストを取得します。strace出力を停止してふるいにかけると、テキストが標準出力に印刷されますが、非常に長く混乱しやすく、停止している間に何かを見逃す可能性があります。ローカルで作業しているかのように、スクリプト出力をライブで表示する方法を見つけたいと思います。 誰でもこれを改善できますか?明らかな答えは、リダイレクトまたはscreenセッションなどでスクリプトを再起動することです。これはミッションクリティカルなスクリプトではないので、それを行うことができます。むしろ、これは楽しい学習エクササイズだと思っています。



7
端末プロンプトが正しく折り返されない
bashで非常に長いコマンドを入力すると、ターミナルが正しく入力しているものを表示しないという問題があります。次のようなコマンドがあった場合、私は期待しています: username@someserver ~/somepath $ ssh -i /path/to/private/key myusername@something.someserver.com コマンドは2行でレンダリングする必要があります。代わりに、次のように、プロンプトの周りをラップして、プロンプトの先頭から書き込みを開始することがよくあります。 myreallylongusername@something.somelongserver.comh -i /path/to/private/key 戻っていくつかの引数を変更することにした場合、カーソルがどこに表示されるかはわかりません。時にはプロンプトの途中ですが、通常は上の行にあります私が入力してるところ。 Up前のコマンドを実行すると、さらに楽しいことが起こります。私はこれをgnome-terminalとterminatorの両方とi3とCinnamonで試しました。誰かがそれが私のプロンプトだと提案したので、ここにそれがあります: \[\033[01;32m\]\u:\[\033[01;34m\] \W\033[01;34m \$\[\033[00m\] Ctrll、reset、およびclearすべてのは、彼らが言う何が、私は後ろにコマンドを入力する場合や、Up同じことが起こります。 チェックしてcheckwinsize、bashで有効になっています。これは、80x24およびその他のウィンドウサイズで発生します。 これは私が一緒に暮らすことを学ぶものなのでしょうか?知っておくべき魔法がありますか?本当に短いプロンプトを使用するだけで解決しましたが、問題は解決しません。
171 bash  terminal  prompt 

12
複数のファイルの拡張子を変更するにはどうすればよいですか?
ファイル拡張子をから*.txtに変更したいと思います*.text。basenameコマンドを使用してみましたが、複数のファイルを変更するのに問題があります。 これが私のコードです: files=`ls -1 *.txt` for x in $files do mv $x "`basename $files .txt`.text" done 私はこのエラーを受け取っています: basename: too many arguments Try basename --help' for more information

6
エイリアスによってシャドウされているコマンドを実行する
bashに次のエイリアスがあるとしますalias ls='ls --color=auto'--そして、lsオプションなしで普通に呼び出したいと思います。それを行う唯一の方法は、エイリアスを解除し、コマンドを実行してから再びエイリアスにすることですか?または、気の利いたトリックや回避策がありますか?
164 bash  shell  alias 


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