κeenです。LLで書かれた動作のもっさりしてるコマンドラインツールよりシェルスクリプトが好きです。 しかしシェルスクリプトを書く時にはハマり所も多いです。ということでハマりそうなところと対処法を共有しますね。 1. 変数は基本クォート 変数には空白が入り得ます(特にパス名とか)。あるいは空である可能性もあります。
![Shell Scriptを書くときのテクニック10選 | κeenのHappy Hacκing Blog](https://cdn-ak-scissors.b.st-hatena.com/image/square/0177620c02c93387d9a40768580c62e8e4bdf435/height=288;version=1;width=512/https%3A%2F%2Fkeens.github.io%2Fimages%2Fogp%2Fpost%2FShell_Scriptwokakutokinikiwotsuketaikoto.png)
κeenです。LLで書かれた動作のもっさりしてるコマンドラインツールよりシェルスクリプトが好きです。 しかしシェルスクリプトを書く時にはハマり所も多いです。ということでハマりそうなところと対処法を共有しますね。 1. 変数は基本クォート 変数には空白が入り得ます(特にパス名とか)。あるいは空である可能性もあります。
なのまるです! Jobで、SSHしてからsudoしようとしたら、ハマったので対処法のメモです! もくじ 何があったの? リモートのサーバーにsudoして処理するスクリプトを書いていたところ問題になったので、その対処法です! 例えば、以下のようなスクリプト ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i user.key [TARGET_HOST] "sudo hogehoge.sh" sudo: sorry, you must have a tty to run sudo いきなりsudo出来なくて、以下のようなメッセージが出力・・・ sudo: sorry, you must have a tty to run sudo sshのmanには -t Force pseudo-tty allocation.
sudoでリダイレクトに失敗 @yutakikuchi_です。 UNIX/Linuxでコマンドラインで実行した結果をファイルにリダイレクトしたい時があります。(例えばPHPのバッチを実行した時に処理のログとエラーログをファイルに書き込んでおきたい。) ユーザに実行権限がないディレクトリのファイルに対してリダイレクトでデータを書き込みたいとき、sudo をつけても失敗します。 次はリダイレクトが失敗する例です。zsh: permission deniedと怒られます。 $ sudo echo 'redirect' >> /var/test/hoge.txt zsh: permission denied: /var/test/hoge.txt うまくいく方法 以下に方法を書きます。私が知る限りでは2つ方法があります。 回避策1 : shのオプションに-cを付ける man sudoを見てみます。
LVSの設定するのにIP forwardを変更する必要があって、それを変更するのに、 sudo echo '1' > /proc/sys/net/ipv4/ip_forwardとかやろうとしたけど、リダイレクトがroot権限で動いてくれなくて上手くいかない。こういう場合は、 echo '1' | sudo tee /proc/sys/net/ipv4/ip_forward sudo sh -c "echo '1' > /proc/sys/net/ipv4/ip_forward"のどちらかでやるといいらしい。個人的には何となく上の方が好み。書き込み権限が無い場合はこうやればいいのか。 ※追記:ごめんなさい。上のコマンド例の下の方「sudo su -c」と書いてました。suじゃなくてshです。sudo suとかしちゃいかんです。 あと、IP forwardする場合は、/etc/sysctl.c
メモ, プログラミングシェルスクリプトからsshで複数のリモートホストにコマンドを投げつける処理を書いてて、いろいろ気がついたことを、あとで自分で調べられるようにメモしておく。 ループからsshでコマンドを投げつけるシェルスクリプトのwhileループ内から、複数のホストへ順番にコマンドを投げつける処理をかいていると、最初のホストにしかコマンドが飛ばない(ループしない)これは、シェルスクリプトのwhileループ自体が、標準入力の読み取りに依存しているのに、sshも標準入力を読み取るのが原因。たとえばこんなループの場合に起きる。 somecommand | while read LINE do ssh user@hostname 'sh yourcommand /dev/null 2>&1 &' done nオプションを付けることで、sshの標準入力が/dev/nullに変わりバックグラウンド
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く