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

他のBourne / POSIXシェルとは対照的に、GNUのBourne Again SHellに固有の質問。Unixシェル全般に関する質問については、代わりに/ shellタグを使用してください。

6
存在しない場合にファイルを作成するシェルスクリプトですか?
ファイルの存在をチェックし、ファイルが存在しない場合は作成し、次のコマンドに進むか、次のコマンドに進むシェルスクリプトを作成する必要があります。私が持っているものはそれをしません。 #!/bin/bash # Check for the file that gets created when the script successfully finishes. if [! -f /Scripts/file.txt] then : # Do nothing. Go to the next step? else mkdir /Scripts # file.txt will come at the end of the script fi # Next command (macOS preference setting) defaults …
19 bash  shell-script  osx 

2
Bash .hushlogin、最終ログイン時刻とホストを保持
私の会社では、いくつかのサーバーにログインすると、最後のログインと大きなバナーが表示されます。 me@my-laptop$ ssh the-server Last login: Mon Feb 8 18:54:36 2016 from my-laptop.company.com ************************************************************************ * * * C O M P A N Y I N F O R M A T I O N S Y S T E M S * * * * !WARNING! Your connection has …
19 bash  login  motd 

4
$ IFS変数を「バックアップ」するのは正しいアプローチですか?
それは$IFSグローバルを破壊しているので、私はいつも混乱するのを本当にheしています。 しかし、多くの場合、文字列をbash配列にロードすると、簡潔かつ簡潔になります。また、bashスクリプトの場合、簡潔さを実現するのは困難です。 だから、開始内容$IFSを別の変数に「保存」して$IFS、何かに使い終わったらすぐにそれを復元しようとすると、何よりも良いかもしれません。 これは実用的ですか?それとも本質的に無意味IFSですか、それ以降の使用に必要なものに直接戻す必要がありますか?

4
bash:プロセス置換でエラーを伝播する方法は?
シェルスクリプトを使用して実行されたコマンドが失敗するたびにシェルスクリプトが失敗するようにします。 通常、私はそれを以下で行います: set -e set -o pipefail (通常、私set -uも追加します) 問題は、上記のいずれもプロセス置換では機能しないことです。このコードは「ok」を出力し、リターンコード= 0で終了しますが、失敗させたいと思います。 #!/bin/bash -e set -o pipefail cat <(false) <(echo ok) 「pipefail」に相当するものがありますが、プロセスの代替はありますか?コマンドの出力をファイルであるとしてコマンドに渡す他の方法がありますが、これらのプログラムのいずれかが失敗するたびにエラーが発生しますか? 貧乏人の解決策は、これらのコマンドがstderrに書き込むかどうかを検出することです(ただし、一部のコマンドは成功したシナリオでstderrに書き込みます)。 posix準拠のもう1つのソリューションは、名前付きパイプを使用することですが、コンパイル済みコードからオンザフライで構築されたonelinersとして、それらのコマンドを使用するプロセス置換を実行する必要があり、名前付きパイプを作成すると物事が複雑になります(余分なコマンド、削除など)

8
複数のbashスクリプトを呼び出して、順番にではなく並行して実行する
:私は3つ(またはそれ以上)のbashスクリプトを持っていると仮定しscript1.sh、script2.shとscript3.sh。これら3つすべてのスクリプトを呼び出して、並行して実行したいと思います。これを行う1つの方法は、次のコマンドを実行することです。 nohup bash script1.sh & nohup bash script2.sh & nohup bash script3.sh & (一般に、スクリプトの終了には数時間または数日かかる可能性があるためnohup、コンソールが閉じても実行し続けるように使用したいと思います。) しかし、これら3つのコマンドを1 回の呼び出しで並行して実行する方法はありますか? 私は次のようなものを考えていました nohup bash script{1..3}.sh & しかし、これは、ではなく、、、およびを順番に実行するようscript1.shに見えます。script2.shscript3.sh

3
コマンドラインから.pdf画像を平坦化する方法はありますか?
GIMPでは、.pdfをインポートし、[画像]ドロップダウンメニューで[フラット化画像]を選択して、GUIを使用して(多くのレイヤーで作成された場合)フラット化できます。その後、新しいファイル名で.pdfをエクスポートできます。 これを自動化したい。ターミナル経由でそれを行う方法はありますか?

2
別のユーザーとして実行するにはどうすればよいですか?
これは、実行する必要があるbashコードです。最初にユーザーをopenprojectに置き換え、すべてのコードを実行します su openproject -c "bash -l" cd ~/openproject git checkout Gemfile.lock git pull bundle install RAILS_ENV="production" bundle exec rake db:migrate RAILS_ENV="production" bundle exec rake db:seed RAILS_ENV="production" bundle exec rake assets:precompile 上記のスクリプトをこれに変更してみました: su - openproject -c "cd ~openproject/openproject" su - openproject -c "git checkout stable" su - openproject -c "git checkout …
19 bash  debian  sudo  su 

6
実行時にbashスクリプトから特定のコマンドのみを印刷するにはどうすればよいですか?
呼び出すときに渡すコマンドライン引数に基づいたさまざまなifステートメントを含むbashスクリプトがあります。どのコマンドが実行されているかについて何らかの出力があると、これらすべてのifステートメントの流れを確認するのに役立ちますが、現在の解決策では情報が多すぎます。 set -vスクリプトで使用すると、コマンドがスクリプトで実行されたときに画面に印刷されるのを見るのに多少役立ちましたが、コマンドが多すぎます。これは、スクリプトの完全なコピーのようなものです。 実行されているコマンドを示す出力が必要ですが、コメント、改行、ifステートメント内の式などは表示したくありません。 -vオプションで生成されたすべての出力を正規表現に渡してから印刷する方法はありますか?または、特定の「タイプ」のコマンドのみを出力するbashを取得する他のソリューション(たとえば、bash固有のステートメント、コメントなどではなく、実行可能ファイルを使用していますか?) [1] /programming/257616/sudo-changes-path-whyはこれに非常に役立ち、set -v使用方法の提案を得ました。 編集: 私が実行しているものに似た(しかし同一ではない)スクリプト: #!/bin/bash #get verbose command output set -v env=$1 if [ "$env" == "dev" ]; then python ascript.py fi if [ "$env" == "prod" ]; then #launching in prod will most likely fail if not run as root. Warn user if …

5
getoptsでオプションが渡されなかったことを検出するにはどうすればよいですか?
私はこのコードを持っています- #getoptDemo.sh usage() { echo "usage: <command> options:<w|l|h>" } while getopts wlh: option do case $option in (w) name='1';; (l) name='2';; (h) name='3';; (*) usage exit;; esac done print 'hi'$name bash getoptDemos.sh(オプションなしで)実行するhiと、関数を呼び出す代わりに印刷されますusage。w、h、l以外のオプションが指定された場合に使用方法を呼び出します。その後、オプションが指定されていない場合は機能しません。 私が使って試してみましたが?、\?、:の代わりに、*私は私が欲しかったものを達成することはできません。私はすべてがそれを使用するようdocsにgetopt言っていることを意味します?。 何が間違っていますか?
19 bash  shell  options  getopts 


4
bash:/ dev / stderr:許可が拒否されました
新しいリリースバージョンにアップグレードした後、bashスクリプトでエラーが発生し始めます。 bash: /dev/stderr: Permission denied 以前のバージョンでは、bashのだろう内部で認識(この質問が重複のない理由であるもののファイル名を、この1)と、正しいこと(TM)を行うが、これは今で動作を停止しました。スクリプトを再び正常に実行できるようにするにはどうすればよいですか? スクリプトを実行しているユーザーをグループttyに追加しようとしましたが、これは違いはありません(ログアウトしてから再度ログインした後でも)。 私は問題なくコマンドラインでこれを再現できます: $ echo test > /dev/stdout bash: /dev/stdout: Permission denied $ echo test > /dev/stderr bash: /dev/stderr: Permission denied $ ls -l /dev/stdout /dev/stderr lrwxrwxrwx 1 root root 15 May 13 02:04 /dev/stderr -> /proc/self/fd/2 lrwxrwxrwx 1 root root 15 May 13 02:04 …


2
シェルスクリプトは、shファイルから実行するとnot foundエラーをスローします。しかし、手動で入力した場合、コマンドは機能します
次のスクリプトを使用して、Webサイトのサイトマップを生成しようとしています。次のsh thsitemap.shようなエラーが発生して実行すると、空のsitemap.xmlファイルが作成されます。 thsitemap.sh: 22: thsitemap.sh: [[: not found thsitemap.sh: 42: thsitemap.sh: [[: not found thsitemap.sh: 50: thsitemap.sh: Syntax error: "(" unexpected しかし、同じユーザーrootがこれらの行を手動で端末にコピーして貼り付けると、エラーなく動作し、sitemap.xmlファイルにはすべてのURLが含まれます。どうしたの?どうすれば修正できますか? #!/bin/bash ############################################## # modified version of original http://media-glass.es/ghost-sitemaps/ # for ghost.centminmod.com # http://ghost.centminmod.com/ghost-sitemap-generator/ ############################################## url="techhamlet.com" webroot='/home/leafh8kfns/techhamlet.com' path="${webroot}/sitemap.xml" user='leafh8kfns' # web server user group='leafh8kfns' # web server group debug='n' …

7
SSHセッションが終了すると、Pythonバックグラウンドプロセスが終了するのはなぜですか?
startup.shキーラインでpython3スクリプトを起動するbashスクリプトがあります(呼び出しましょう): nohup python3 -u <script> & sshこのスクリプトを直接呼び出して呼び出した場合、終了後もPythonスクリプトはバックグラウンドで実行され続けます。ただし、これを実行すると: ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> "./startup.sh" プロセスは実行を終了するとすぐにssh終了し、セッションを閉じます。 2つの違いは何ですか? 編集:Pythonスクリプトは、ボトル経由でWebサービスを実行しています。 EDIT2:を呼び出して実行するinitスクリプトを作成しようとしましたが、同じ動作になりました。startup.shssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> "sudo service start <servicename>" EDIT3:多分それはスクリプト内の何か他のものです。スクリプトの大部分は次のとおりです。 chmod 700 ${key_loc} echo "INFO: Syncing files." rsync -azP -e "ssh -i ${key_loc} -o StrictHostKeyChecking=no" ${source_client_loc} ${remote_user}@${remote_hostname}:${destination_client_loc} echo "INFO: Running startup script." …


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