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

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

2
スクリプトの実行後にエクスポートされた変数が保持されない
私は奇妙な問題に直面しています。私は、solaris 11を備えたvmを使用しており、bashスクリプトを作成しようとしています。 シェルで次のように入力すると、 export TEST=aaa 次に実行します: set 値がaaaであるTESTという名前の新しい環境変数が正しく表示されます。ただし、スクリプトで基本的に同じことを行う場合。スクリプトが終了すると、変数セットが表示されません。具体的な例を作るために、ファイルtest.shにある場合: #!/usr/bin/bash echo 1: $TEST #variable not defined yet, expect to print only 1: echo 2: $USER TEST=sss echo 3: $TEST export TEST echo 4: $TEST それは印刷します: 1: 2: daniele 3: sss 4: sss 実行後、TESTはシェルに設定されません。何か不足していますか?エクスポートTEST = sssと別の変数set / exportの両方を実行して、違いはありません。
8 bash  solaris 


2
rsync:最上位ディレクトリのみのDotfileを除外する方法は?
バッシュの下でバックアップを実行する場合rsync、私はトップディレクトリ内のすべてのドットファイルおよび隠しディレクトリを除外しようとしましたが、ないそうでない場合は対象ディレクトリのもの。例えば: /copyme.c /.dontcopythisfile /.dontcopythisdirectory/or_its_contents /directory/.butcopymetoo rsync -a --include=".includeme" --exclude=".*" . DESTサブディレクトリで目的のドットファイルをコピーできませんが、などのバリエーション--exclude="./.*"も失敗します。 提案?これには、より単純なものとは対照的にフィルター規則が必要--excludeですか?
8 regex  bash  rsync 

2
猫* | 何かをgrepします。結果のファイルは何ですか
次のコマンドを実行するとします cat * | grep DATABASE シェルは、単語を含む*ファイル内のすべての行を吐き出しDATABASEます。各行が離れているファイルを吐き出す方法はありますか? 私は言うに-Hよるとgrep のオプションを使用しようとしましたが、私のシェルではそれはただ言うmanprint the filename for each match (standard input):$DATABASE_FUNCTION = dothis();
8 bash  grep  cat 

5
Bash:コマンドが関数の引数として渡されると引用符が取り除かれます
スクリプトにドライランのようなメカニズムを実装しようとしていますが、コマンドが引数として関数に渡されたときに引用符が取り除かれ、予期しない動作が発生する問題に直面しています。 dry_run () { echo "$@" #printf '%q ' "$@" if [ "$DRY_RUN" ]; then return 0 fi "$@" } email_admin() { echo " Emailing admin" dry_run su - $target_username -c "cd $GIT_WORK_TREE && git log -1 -p|mail -s '$mail_subject' $admin_email" echo " Emailed" } 出力は次のとおりです。 su - webuser1 -c …



3
start-stop-daemonでのstdout / stderrリダイレクト
init私のデーモンの出力を2つのファイル(stdoutとstderr)にリダイレクトする構成を記述しようとしています。問題は、機能していないことです。私はこれを今読んでいます。 そこで、このシェルスクリプトを実行して、このアプローチをテストしました。そしてそれはうまくいきません: PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="Seed kurokikaze starter" #NAME=node DAEMON="/etc/node-version/0.1.99/bin/node" DAEMON_ARGS="/etc/seed/kurokikaze/server.js" DAEMON_DIR="/etc/seed/kurokikaze" APPLOG_FILE="/var/log/seed/kurokikaze" ERRLOG_FILE="/var/log/seed/kurokikaze-err" PIDFILE="/var/run/seeds/kurokikaze.pid" SCRIPTNAME="/etc/seed-init/kurokikaze" NCMD="exec $DAEMON $DAEMON_ARGS 1>>$APPLOG_FILE 2>>$ERRLOG_FILE" start-stop-daemon -Sbmv --pidfile $PIDFILE --chdir ${DAEMON_DIR} --exec $DAEMON --startas /bin/sh -- $NCMD しかし、別のシェルでデーモンをラップせずにこれを開始すると、意図したとおりに機能します(stderr / stdoutリダイレクトなしで)。 start-stop-daemon -Sbmv --pidfile $PIDFILE --chdir ${DAEMON_DIR} --exec $DAEMON -- ${DAEMON_ARGS} 問題は、なぜ最初のスクリプトが機能しないのか、です。システムはDebian Lenny、start-stop-daemonバージョンは1.14.29です。
8 debian  bash 

4
ユーザー名をスクリプトに渡して、ユーザーのホームディレクトリを見つけます。
ユーザーがログインして特定のフォルダーが存在するか、壊れたシンボリックリンクであるかを確認するときに呼び出されるスクリプトを書いています。(これはMac OS Xシステム上にありますが、問題は純粋にbashです)。 エレガントではなく、機能していませんが、現在は次のようになっています。 #!/bin/bash # Often users have a messed up cache folder -- one that was redirected # but now is just a broken symlink. This script checks to see if # the cache folder is all right, and if not, deletes it # so that the system …
8 unix  bash 


1
.pgpassに相当するMySQL、またはmySQLのcronジョブでの自動認証
データベースをバックアップするbashスクリプトを書いています。ほとんどはpostgresqlであり、postgresには、postgresパスワードを含む〜/ .pgpassファイルを作成することで認証を回避する方法があります。これをルートのホームディレクトリに置き、chmod 0600にしたので、ルートは認証なしでpostgresデータベースをダンプできます。mysqlデータベースは1つしかありませんが、mysqlについても同様の処理を行います。これどうやってするの?mysqldumpのコマンドラインでパスワードを指定したくありません。これは、他のユーザーには多少見える可能性があるスクリプトの一部であるためです。これを行うには、rootだけが読み取り、次に読み取ってmysqlパスワードを取得できるファイルを作成し、それをbashスクリプトで変数として使用するよりも良い方法(つまり、mysqlに組み込まれている)がありますか?
8 backup  bash  cron  mysql 

3
sudoの前のユーザー名
sudoを必要とするスクリプトを取得しましたが、スクリプトは次のような元のユーザーに応じてパラメーターを設定する必要があります。 chown "${USER}:${USER}" dir sudoで設定するとchmod root:root、結局はで終わりますが、これは役に立ちません。 では、sudoの前にユーザー名を取得するにはどうすればよいですか?



5
プロセスが死ぬまで殺すためのBashスニペット?
堅牢なbashスクリプトを記述しようとしています。その中で、バックグラウンドプロセスを作成します。スクリプトの最後に、私はそれを殺したいと思います。PIDがあります。 私はこのような何かを考えていました while [[ ps ef $PID ]] ; do kill $PID sleep 0.5 done より良い何かのための提案はありますか?このアプローチで考えられる問題はありますか?

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