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

BashはBourne Again SHellであり、古典的なUnix sh(シェル)の後継です。

5
複雑な複数行の文字列を変数に書き込むクリーンな方法
複雑なxmlをbashスクリプト内の変数に書き込む必要があります。xmlはbashスクリプト内で読み取り可能である必要があります。これはxmlフラグメントが存在する場所であり、別のファイルまたはソースから読み取られないためです。 だから私の質問は、bashスクリプトの中で人間が読めるようにしたい長い文字列を持っている場合、これは最善の方法は何ですか? 理想的には: 文字をエスケープする必要がないように 複数の行に分割して、人間が読めるようにします インデントを維持する これはEOFまたは何かで行うことができますか、誰か例を教えてもらえますか? 例えば String = <<EOF <?xml version="1.0" encoding='UTF-8'?> <painting> <img src="madonna.jpg" alt='Foligno Madonna, by Raphael'/> <caption>This is Raphael's "Foligno" Madonna, painted in <date>1511</date>-<date>1512</date>.</caption> </painting> EOF
109 bash 




9
mysqldumpをtar.gzに
通常、mysqldumpコマンドでMySQLデータベースをダンプした後、すぐに結果のファイルをtar / gzipします。私はこれを1つのコマンドで行う方法を探しています: だからこれから: mysqldump dbname -u root -p > dbname.sql tar czvf dbname.sql.tgz dbname.sql rm dbname.sql このようなものに: mysqldump dbname -u root -p > some wizardry > dbname.sql.tgz またはさらに良い(私は通常ダンプファイルを別のサーバーにscpしているため): mysqldump dbname -u root -p > send dbname.sql.tgz to user@host 私はdebianでbashを実行しています。
88 mysql  debian  bash  gzip  tar 


7
nologinシェルを持つユーザーとしてスクリプトを実行します
必要なのは、でnologin/false示されているシェルを持つ特定のユーザーとして特定のスクリプトを実行することだけです/etc/passwd。 スクリプトをルートとして実行し、これは別のユーザーとして実行する必要があります。ランニング: ~# su -c "/bin/touch /tmp/test" testuser 動作しますが、テストユーザーには有効なシェルが必要です。パスワードを無効にしpasswd -d testuserてシェルを/bin/bashこの方法のままにしておくと少し安全になることはわかっていますが、シェルが必要nologin/falseです。 基本的に私が必要なのはcrontab、特定のユーザーがnologin/falseシェルを持っているかどうかに関係なく、特定のユーザーとしてジョブを実行するように設定した場合の処理です。 psこのスレッドはnologinユーザーとしてコマンドを実行していることがわかりましたが、実行する必要があるスクリプトへconcatenateのコマンドのsu -s /bin/sh $user実行方法がわかりません。
87 linux  bash  shell  su  login 

7
(「スーパー」)シェルにすぐに戻ることなく、初期コマンドで対話型bashサブシェルを実行します
bashサブシェルを実行し、(1)いくつかのコマンドを実行し、(2)その後、そのサブシェルに残りたいと思います。これらのそれぞれを個別に行うことができます。 -cフラグを使用してコマンドを実行します。 $> bash -c "ls; pwd; <other commands...>" ただし、コマンドが実行されるとすぐに「スーパー」シェルに戻ります。インタラクティブなサブシェルを実行することもできます。 新しいbashプロセスを開始: $> bash そして、明示的に言うまでサブシェルを終了しません...しかし、初期コマンドは実行できません。私が見つけた最も近い解決策は次のとおりです。 $> bash -c "ls; pwd; <other commands>; exec bash" これは機能しますが、1つのサブシェルで指定されたコマンドを実行し、対話のために別のコマンドを開くため、私が望んだ方法ではありません。 これを1行で行いたい。サブシェルを終了したら、問題なく通常の「スーパー」シェルに戻る必要があります。道があるはずです~~ NB:私が尋ねていないことは... bashのmanページの入手先を尋ねない ファイルから初期化コマンドを読み取る方法を尋ねません...私はこれを行う方法を知っています、それは私が探している解決策ではありません tmuxまたはgnu画面の使用に興味がない これにコンテキストを与えることに興味がない。すなわち、質問は一般的なものであり、特定の目的のためではありません 可能であれば、私が望んでいることを達成するような回避策の使用を避けたいのですが、「汚い」方法で。これを1行で行いたいだけです。特に、次のようなことはしたくないxterm -e 'ls'
87 bash 

7
複数の〜/ .ssh / configファイルを使用できますか?
複数のホストに接続するために使用する要塞サーバーがあり、.ssh / configが1000行を超えました(何百ものホストが接続されています)。これは少し扱いに​​くいものになり始めており、.ssh / configファイルを複数のファイルに分割する方法があるかどうかを知りたいと思います。理想的には、他のファイルが.ssh / configファイルとして扱われる場所を指定します。 ~/.ssh/config ~/.ssh/config_1 ~/.ssh/config_2 ~/.ssh/config_3 ... 私はssh / configのドキュメントを読みましたが、これが可能であるとは思いません。しかし、他の誰かが同様の問題を抱えており、解決策を見つけた可能性があります。
82 linux  ssh  unix  bash 


12
ssh over sshを使用して複雑なコマンドを任意に実行するにはどうすればよいですか?
ユーザー名(myuser)でしかログインできないシステムがありますが、他のユーザー(scriptuser)としてコマンドを実行する必要があります。これまでのところ、必要なコマンドを実行するために次のことを考え出しました。 ssh -tq myuser@hostname "sudo -u scriptuser bash -c \"ls -al\"" ただし、より複雑なコマンドを実行しようとする[[ -d "/tmp/Some directory" ]] && rm -rf "/tmp/Some directory"と、クォートですぐに問題が発生します。渡すコマンドの境界が既に区切られているbash -c場合、この複雑なコマンド例をにどのように渡すことができるの\"かわかりません(したがって、スペースを含む/ tmp / Someディレクトリを引用する方法がわかりません)。 クォートがどれほど複雑/クレイジーであっても、コマンドを渡すことができる一般的な解決策はありますか、これは私が到達した何らかの制限ですか?他の可能性のある、おそらくより読みやすいソリューションはありますか?
80 ssh  bash  scripting  sudo 


7
実動サーバー上の管理者が実行したすべてのコマンドをログに記録する
管理者が個人のユーザー名を介してサーバーにログインし、実行sudo -iしてルートになることは企業ポリシーです。を実行するとsudo -i、sudoはと呼ばれる環境変数を作成しSUDO_USERます。これには、元のユーザーのユーザー名が含まれます。 次の構文に似た何かでsyslog内のすべてのコマンドを記録する方法はありますか? ${TIME/DATE STAMP}: [${REAL_USER}|${SUDO_USER}]: ${CMD} エントリの例は次のとおりです。 Sat Jan 19 22:28:46 CST 2013: [root|ksoviero]: yum install random-pkg 明らかに上記の構文である必要はなく、最低限の実ユーザー(例:root)、sudoユーザー(例:ksoviero)、および実行された完全なコマンド(例:yum)を含める必要があります。 random-pkgをインストールします)。 すでに試しましたsnoopyが、SUDO_USER変数は含まれていません。
71 centos  bash  logging  sudo 

8
開始したばかりのプロセスのPIDを取得する方法
プロセス(例:myCommand)を開始し、そのpidを取得します(後で強制終了できるようにします)。 私はpsを試し、名前でフィルタリングしましたが、名前でプロセスを区別できません myCommand ps ux | awk '/<myCommand>/ {print $2}' プロセス名は一意ではないためです。 プロセスを実行するには: myCommand & このPIDは次の方法で取得できます。 echo $! もっと簡単な解決策はありますか? myCommandを実行して、1行のコマンドの結果としてそのPIDを取得できれば幸いです。
71 linux  unix  bash  process  pid 

10
zshと比較したbashのユニークな機能
私はかなり長い間(そのtcshの前で、そのcshの前で)zshユーザーでした。私はこれに非常に満足していますが、zshには存在しないbashの魅力的な機能があるかどうか疑問に思っていました。そして逆に、bashには存在しないzsh機能があります。私の現在の感じは、bashの方が良いということです。 すでに慣れていて、新しい構文を学びたくない場合。 デフォルトでは、ほとんどすべての* nixマシンに存在しますが、zshは追加インストールになる場合があります。 ここで宗教的な戦いを始めようとしないので、シェルの1つだけに存在する機能を探しています。
67 bash  shell  zsh 

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