タグ

bashに関するmasayoshinymのブックマーク (58)

  • 「Bash」をカスタマイズして、Linuxをより便利に使いこなそう

    第7回の今回は、Bashの仕組みを解説し、履歴管理やプロンプトをカスタマイズしてCLI環境を向上する方法を解説します。 はじめに どのようなアプリにも、個人用の設定というものが存在します。例えば、Webブラウザはフォントやカラーテーマ、タブの細かい挙動などを個人の好みに応じてカスタマイズできます。Linuxで使われる様々なツールもこうした例に漏れず、非常に柔軟なカスタマイズや機能拡張が可能です。有名なテキストエディタであるVimEmacsなどがその代表格で、そのカスタマイズの柔軟さと奥の深さは、想像を絶するものがあります*1。 *1: Emacsは一見テキストエディタのように見えますが、その実体はEmacs Lisp言語の実行環境です。Emacs Lisp言語で実装可能なあらゆる機能をエディタ上で実行できるため、無限の拡張性を持っています。そしてLinuxを使いはじめたばかりのユーザーは

    「Bash」をカスタマイズして、Linuxをより便利に使いこなそう
  • シェルスクリプトで変数に改行文字を入れる方法の細かすぎる解説 - Qiita

    すべての POSIX シェルで使用可能なので私はこれを推奨します。シェルスクリプトの改行コードは Windows の CR+LF ではなく LF を使用している前提です。いくつかの環境ではシェルスクリプトの改行コードに CR+LF を使用していても動くようなのですが(未調査)、遅かれ早かれ問題になるはずです。また需要は少ないと思いますが、POSIX シェル以前の Bourne シェルでも使える(おそらく)唯一の方法です。Solaris 10 などの古い環境にも対応させるのであればこの方法しかありません。 メリットはコードの量が最も少なく最も速いということです。デメリットは 2 行になるため少し不格好でインデントをする場合に困るだけですが、インデントに関してはこのような定数はスクリプトの上部の関数の外で定義するので通常は問題にならないはずです。 LF=$'\n' bash、ksh、mksh、

    シェルスクリプトで変数に改行文字を入れる方法の細かすぎる解説 - Qiita
  • シェルスクリプトの変数はダブルクォートしなければいけない!という話 - Qiita

    TL; DR 変数をダブルクォートしない使い方は上級者向けの危険な機能です! $@ と $*(または配列の全要素)をダブルクォートしない使い方は知る必要すらありません! ShellCheck を導入すれば誰でも簡単に正しい書き方がわかります!! 2021-08-21 補足 この記事は dash や bash などの POSIX シェルの一般的な動作を解説しており zsh のデフォルトとは異なります。記事の中でも説明していますが zsh の場合はシェルのオプションを変更することで POSIX 準拠の動作に変更することができます。zsh に関しては後半の「zsh に関する注意点」も参照してください。 はじめに プログラミング言語は、言語によって記号の意味が異なることがよくあります。クォーテーションマークはその一つです。C 言語ではシングルクォートは文字リテラル(一文字)を意味し文字列はダブルク

    シェルスクリプトの変数はダブルクォートしなければいけない!という話 - Qiita
  • 【bash】Alt+数字を押すと(arg: 数字) と表示されるのは何? at softelメモ

    問題 bashで Alt+数字を押すと、以下のような状態になるのですが、これは何ですか? [root@dev ~]# (arg: 3) 答え Readline Arguments です。 readline に、数字を渡すと、繰り返し回数として機能したり、マイナスを渡すと逆向きに動作したりします。 例) Alt+3 → a で aaa と入力される。 Alt+100 → BackSpace で一気に100文字削除 Alt+-→ BackSpace でいつもと反対方向の行末削除 Ctrl+k でカーソル位置から行末へ削除 Alt+-→ Ctrl+k でカーソル位置から行頭へ削除

    【bash】Alt+数字を押すと(arg: 数字) と表示されるのは何? at softelメモ
  • チルダ(~)はどうしてホームディレクトリになるのか - Lambdaカクテル

    たまに忘れてコケたり,周りでも困っている人がいるようだったのでメモ. 追記(2020-09-06T11:25+09:00) この記事では仕組みのほうについて記述しており,由来については書いてなかったのですが,ブコメでホームディレクトリがチルダで表記されるようになった由来について幾人かの識者にご指摘いただきました. unix.stackexchange.com ちょうどHOMEキーと同じ場所にチルダキーがあったんですね.ありがとうございました. tl;dr ~/は$HOME/と同義である ~/が$HOME/に,ひいては実際の$HOME/の中身に展開されるのはシェル(e.g. bash, zsh, etc...)の拡張機能 シェルを使わなければその機能は使えないので,手で展開する必要がある シェルを使わない状況: プログラム中からパスをいじるような場合,DockerfileのCMDなど ~--

    チルダ(~)はどうしてホームディレクトリになるのか - Lambdaカクテル
  • One-liners | Basic | Cheat sheet | Linux Command Library

    $ wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com

    One-liners | Basic | Cheat sheet | Linux Command Library
  • Windows TerminalとPowerShellでクールなターミナル環境をつくってみた

    // 👀 https://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/global-settings { "$schema": "https://aka.ms/terminal-profiles-schema", "defaultProfile": "{574e775e-4f2a-5b96-ac1e-a2962a402336}", "theme": "dark", "copyOnSelect": false, "copyFormatting": false, // ダブルクリックでパスを丸ごと選択したいため "wordDelimiters": " ", // 👀 https://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/profi

    Windows TerminalとPowerShellでクールなターミナル環境をつくってみた
  • ShellでSeleniumを作る ~Shellnium~ - Qiita

    はじめに この記事はQiita夏祭り2020のイベントの1つ、パソナテックさんが開催している「〇〇(言語)のみを使って、今△△(アプリ)を作るとしたら」のテーマで投稿しています。 いやぁ良いお題ですよね。エンジニア心揺さぶられるし、景品も豪華だし、何よりちょっとワクワクしたので参加させていただきました。 今回は「ShellでSeleniumを作る ~Shellnium~」というお題でやっていきます。下記はShellniumで遊んでいるGIFです。 ブラウザの自動操作の模様をiTermの背景として鑑賞することができます。意味不明さがすごいですね。(透明度をいじってるとかではありません) いろんな言語でSeleniumは扱える Seleniumは皆さん御存知の通り、ブラウザの自動操作をするツールですね。 SeleniumはWebDriverを介してブラウザの自動操作を行っていくもので、php,

    ShellでSeleniumを作る ~Shellnium~ - Qiita
  • bash の危険な算術式 - どさにっき

    ■ bash の危険な算術式 _ 使ってる人がいちばん多いだろうからタイトルでは bash としてるけど、ここで取り上げることは zsh および ksh 一族(家 ksh、pdksh、mksh)にも該当する。ash、dash などでは該当しない。 _ 以下のシェルスクリプトには脆弱性がある。わかるだろうか。 #!/bin/bash # "品目,単価,個数" の形式の CSV を読んで、"品目,合計金額" の形式で出力する csv="foo.csv" while IFS=, read item price num; do echo "$item,$((price*num))" done < "$csv" これ、細工された CSV ファイルをわせることで、任意コードの実行ができてしまう。数ある脆弱性の中でもとくにヤバいやつだ。どこが穴なのかというと、タイトルにもあるとおり算術式なのだが、し

  • Not Found

  • シェルスクリプトを高級言語のような書き味に近づける Tips 集 | 創作メモ帳

    Bash は歴史のある代表的なコマンド言語で、テキストにコマンドを並べるだけで手軽にシェルスクリプトとして実行できます。 シェルスクリプトは基的にはコマンドの羅列ですが、変数や条件分岐、ループ、関数などの制御構文も備えており、手続き型プログラミング言語としての側面も持っています。これらを活用すれば、シェルスクリプトでプログラミングが可能です。 もちろん、一般的なプログラミング言語と比べると機能は限定的で、独特のクセや記法も多いため、最近の言語に慣れた人は戸惑うことも少なくありません。 しかし Bash ならではの強みもあります。多くの OS で標準シェルとして使われているため、普段のシェルコマンドを並べるだけで動く手軽さは非常に魅力的です。一度習得すれば長く役立つ技術と言えるでしょう。 シェルスクリプトを単なるコマンドの集合と捉えず、一つのプログラミング言語として意識して書くことで、Py

    シェルスクリプトを高級言語のような書き味に近づける Tips 集 | 創作メモ帳
  • ターミナルでの入力の記録と再生、Webでの共有が可能なOSSツール – asciinema

    こんにちは、shoito(しょいと)です。 今回はCloud Native Computing Foundation(CNCF)のサンドボックスプロジェクト、TelepresenceというKubernetesアプリケーションの開発とテストをローカルで行うための支援ツールを紹介しようと思ってましたが、トップページに埋め込まれているasciinemaの方が気になったので紹介します。 Telepresenceは別の機会に。 asciinemaとは https://asciinema.org/ asciinemaはターミナルセッションの記録とWeb上での共有ができるOSSのツールです。 asciinema.orgにはギャラリーも設けられており、他のユーザーが共有しているターミナルの記録が見られます。 asciinemaを試してみた macOS Mojave(10.14.1)環境で試しました。 Ho

    ターミナルでの入力の記録と再生、Webでの共有が可能なOSSツール – asciinema
  • bash

    Linux においての「コマンド」とは、シェルによって実行ファイルが実行されていることを意味します。 たとえば ls コマンドをユーザが入力した際、その入力はシェルにとっての入力でしかありません。シェルはユーザから入力された ls という文字列を「ls という実行ファイルを実行する」と解釈し、カーネルに伝えます。 ls という実行ファイルを実行した結果がシェルによってユーザに伝えられ、あたかもユーザは ls という実行ファイルを直接実行したように感じることができます。 このように「実行したように」というのがユーザインタフェースとしてのシェルの役目です。 しかし、今回はスクリプト言語としての bash をメインに扱うので、この章は軽く流していただいて結構です。 ご存じのように bash はプログラミング言語(シェルスクリプト)のひとつとして動作します。 プログラミング言語として、最低限備わっ

  • bashスクリプティング研修の資料を公開します - エムスリーテックブログ

    こんにちは、エンジニアリングGの中村です。 以前にこのブログにてエムスリーでの社内研修について紹介しました。今回は、この中でのbashスクリプティング講座の資料を公開します。 www.m3tech.blog 弊社の中でもいろいろな用途でbashが使われていますが、bashは簡単に利用できるもののプログラミング言語としてはバグを生みやすい、辛い言語だと思います。 ここで紹介しているのはいわゆるコーディング規則というよりも、バグ防止と可読性向上のためのルールをTips集的にまとめたものです。 bashにおいてまだまだ注意するところはありそうですが、多少なりともわかりにくいスクリプトの削減になればと期待しています。 [追記: 2018-08-22] はてブにて以下のコメントをいただきました。 bashスクリプティング研修の資料を公開します - エムスリーテックブログ bashで50行以上になった

    bashスクリプティング研修の資料を公開します - エムスリーテックブログ
  • 雰囲気でシェルを使っている人のためのシェル入門 | κeenのHappy Hacκing Blog

    κeenです。雰囲気でシェルを使ってる人が多いとのことだったので少しばかり込み入った知識を。 あと一応POSIX準拠かどうかも気にしながらやっていきます。 基礎知識編 シェルの種類 まず、POSIXにシェルが定義されています。 これに最低限の機能で準拠しているものをPOSIXシェルと呼ぶことにします。いわゆる/bin/shです。具体的な実装はbsh、ash、dashあたりでしょうか。 最低限の機能以上に色々拡張されているシェルを拡張POSIXシェルと呼ぶことにします。具体的な実装はbash、zsh、kshなどでしょうか。 ここでは触れませんがPOSIX準拠でないシェルも存在してcshやtcshなどのシェルがあります。あと確か最近話題のfishも違ったような。 さて、1つ問題になるのは普段使いのコマンドラインはおおむね拡張POSIXシェルでしょうが、サーバで使うシェルやデプロイスクリプトで呼

    雰囲気でシェルを使っている人のためのシェル入門 | κeenのHappy Hacκing Blog
  • .bashrc/.zshrcを再読込した際にPATHを余計に追加しないようにする方法

    B! 9 0 0 0 BashやZshで設定ファイルである.bashrcや.zshrcをちょっと変更して 再び読み込む場合、 PATHの値などは基付け加えていく様な設定になってるため、 読み込む度に同じPATHが付け加えられていってやたら長いPATHの値になったりしてしまいます。 そういったことを避けるために最初にちょっと付け加えておく設定について。 .bashrc/.zshrcでのPATHなどの設定 _reset_path PATHを追加する時のもチェックする .bashrc/.zshrcでのPATHなどの設定 .bashrc/.zshrc の中で export PATH=/home/USER/bin:$PATH みたいな設定をして自分用のPATHを追加する事があると思います。 この設定のまま.bashrc/.zshrcを再び読み込むと $ echo $PATH /home/USER/

    .bashrc/.zshrcを再読込した際にPATHを余計に追加しないようにする方法
  • Bashアプリケーションをテストする | POSTD

    以前、bashスクリプトをテストする仕事に取り組んだことがあります。最初、Pythonユニットテストを使うことにしましたが、プロジェクトに外部技術を持ち込むのは気が進みませんでした。そこで、仕方なく、悪名高い bash で書かれたテスト用フレームワークを使いました。 既存ソリューションの概要 手に入るソリューションを探してGoogle検索しましたが、選択肢はほんの少ししかありませんでした。そのうちいくつかについて、詳しく見ていきましょう。 重要になるのは、どんな基準でしょうか? 依存関係: bass のテスト用フレームワークを選ぶときに、 python 、 lua などのシステムパッケージも一緒に引きずり込むのは嫌ですね。 インストールの難しさ:継続的な開発の実装とTravis CIでの継続的な統合も仕事の1つだったので、私にとってインストールにかかる時間と手間数が妥当だということは、重要

    Bashアプリケーションをテストする | POSTD
  • bashで実行するコマンドをbash_historyに記録させたくない場合 | 俺的備忘録 〜なんかいろいろ〜

    bashで、オプションにパスワードを指定したりした場合など、実行したコマンドをbash_historyに記録させたくない場合がある。 そういった場合、以下のコマンドを実行(起動時に設定するなら.bashrcなどに追記)してやることで、コマンド実行時に頭に空白がある場合はhistoryにコマンドが残らないよう設定ができる。 export HISTCONTROL=ignorespace # 空白から始まるコマンドをhistoryに記録しない export HISTCONTROL=ignoreboth # 空白のみ+空白から始まるコマンドをhistoryに記録しない 上のコマンド実行後は、historyに記録しないコマンドの先頭にはスペースを入力してやればよい。 □cmd [root@BS-PUB-CENT7-01 ~]# echo 1 1 [root@BS-PUB-CENT7-01 ~]# h

  • sendmail でコマンドからメールを送信する。 - それマグで!

    メール通知のテストに使う。 postfix や exim4 のメールサーバーの設定をしていて、テスト・メールを送信したいときに、手作業でsendmail コマンドを送るのは、ちょっと面倒なのと、どのメールが未到達で、どのメールが到達したか区別するのが大変なのでスクリプト書きました。 サンプルスクリプト。 サンプルスクリプトでは、連番を入れて、どのメールか識別できるようにしてて、日付と時刻をいれてそちらでも識別できるようにしておいた。 send_mail.sample.sh #!/usr/bin/env bash function counter() { if [[ ! -f /tmp/count ]] ; then touch /tmp/count echo 1 > /tmp/count fi num=$(tail -n 1 /tmp/count) echo $(( num+1 )) >

    sendmail でコマンドからメールを送信する。 - それマグで!
  • bashの配列のまとめ(定義・代入・参照と取得・ループ) - それマグで!

    bash も配列を扱える シェルスクリプトで配列を扱えるので 配列を扱ってみる。 今回は、サンプルのために、変数名を大文字にしています。もちろん小文字も使えます。 大文字は、おもに環境変数やスクリプト間やプロセス間で値を渡すときに使うことが多いようです。 配列の定義 配列の定義には基的に2つあります。 コマンドをの実行結果を配列に入れたい場合は、mapfile や IFS を使うのがいいとおもいます。 bash の配列の定義の例 declare ARR=() declare -a ARR # または arr=() #無精する場合 配列の定義を改行する場合は、文字列でクォートが手っ取り早い。 arr=("a b c ") 配列の削除 定義した配列は削除できます。 unset -v ARR unset -v ARR[@] # または unset -v ARR[*] # または 配列の初期値を

    bashの配列のまとめ(定義・代入・参照と取得・ループ) - それマグで!