タグ付けされた質問 「shell-script」

シェルスクリプト、シェルによって解釈される実行可能ファイル(bash、zshなど)に関する質問。

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' …

6
ファイルシステムがスクリプトでマウントされているかどうかを確認する方法
私はスクリプトを書くのは初めてです...私は非常に基本的なことをすることができますが、今は手が必要です。 バックアップが必要なときにのみマウントされるローカルファイルシステムがあります。 私はこれから始めています。 #!/bin/bash export MOUNT=/myfilesystem if grep -qs $MOUNT /proc/mounts; then echo "It's mounted." else echo "It's not mounted."; then mount $MOUNT; fi 私が言ったように、私はスクリプト作成は非常に基本的です。mountリターンコードを見ることで、コマンドのステータスを確認できると聞きました。 RETURN CODES mount has the following return codes (the bits can be ORed): 0 success 1 incorrect invocation or permissions 2 system error (out of …

3
bashスクリプトで新しい空のファイルを作成するにはどうすればよいですか?
出力フラグの出力ファイルが必要になるように書かれたサードパーティのPerlスクリプトを実行しています-o。 残念ながら、スクリプトには実際のファイルが必要なようです。つまり、ユーザーはfilename.txt0バイトの空のファイルを作成してから、スクリプトコマンドラインでこの空のファイルを入力する必要があります。 perl script1.pl -o filename.txt 質問:bashスクリプト内で空のファイルを作成するにはどうすればよいですか?単純に試みるperl script1.pl -o filename.txtと、スクリプトはファイルが存在しないというエラーを出します。

5
ポート3000で実行されているプロセスの追加情報なしでPIDのみを取得するにはどうすればよいですか?
CentOS 7を使用しています。ポート3000で実行されているプロセスのPID(存在する場合)を取得します。シェルスクリプトの変数に保存する目的でこのPIDを取得したいと思います。これまでのところ [rails@server proddir]$ sudo ss -lptn 'sport = :3000' State Recv-Q Send-Q Local Address:Port Peer Address:Port Cannot open netlink socket: Protocol not supported LISTEN 0 0 *:3000 *:* users:(("ruby",pid=4861,fd=7),("ruby",pid=4857,fd=7),("ruby",pid=4855,fd=7),("ruby",pid=4851,fd=7),("ruby",pid=4843,fd=7)) しかし、この追加情報なしでPIDを単独で分離する方法はわかりません。

5
major.minor.patchレベル、時にはrcでリストをソートするにはどうすればよいですか?
次のリストをシェルスクリプトでソートし、最新バージョンを下部または上部に表示する必要があります。シェルツールのみでそれを行うにはどうすればよいですか? release-5.0.0.rc1 release-5.0.0.rc2 release-5.0.0 release-5.0.1 release-5.0.10 release-5.0.11 release-5.0.13 release-5.0.14 release-5.0.15 release-5.0.16 release-5.0.17 release-5.0.18 release-5.0.19 release-5.0.2 release-5.0.20 release-5.0.21 release-5.0.22 release-5.0.23 release-5.0.24 release-5.0.25 release-5.0.26 release-5.0.27 release-5.0.28 release-5.0.29 release-5.0.3
18 shell-script  awk  sed  python  sort 

4
現在のシェルを確認するcheckbashisms準拠の方法
私.profileので、次のコードを使用して、ログインシェルが実際にBashである場合にのみBash関連のエイリアスと関数がソースされるようにします。 # If the current (login) shell is Bash, then if [ "${BASH_VERSION:-}" ]; then # source ~/.bashrc if it exists. if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi 現在、シェル構成ファイル、スクリプト、および関数をバージョン管理下に置いています。また、最近、Bash固有の機能の恩恵を受けないカジュアルなBashismをシェルスクリプトから削除するプロセスを開始function funcname()しましたfuncname()。たとえば、に置き換えます。 シェルファイルリポジトリには、リポジトリ内の各ファイルでDebianのdevscriptsパッケージからユーティリティを実行するpre-commitフックを設定し、Bash固有の構文を誤って導入しないようにしました。ただし、これによりmyのエラーが発生します。checkbashismssh.profile possible bashism in .profile line 51 ($BASH_SOMETHING): if [ "${BASH_VERSION:-}" ]; then 私は、どのシェルが実行されているかをチェックする方法があり、それが警告をトリガーしないかどうか疑問に思っていましたcheckbashisms。 POSIXによってリストされたシェル関連の変数のリストをチェックして、現在のシェルを表示するために使用できることを期待しました。また、インタラクティブなDashシェルで設定された変数を調べましたが、適切な候補を見つけることができませんでした。 現時点では、.profile処理対象から除外していますcheckbashisms。小さいファイルなので、手動で確認するのは難しくありません。ただし、問題を調査した後、実行中のシェル(または少なくともcheckbashisms失敗を引き起こさない方法)を判別するPOSIX準拠のメソッドがあるかどうかを知りたいと思います。 さらなる背景/説明 …

6
実行時に変数を引用する必要がありますか?
シェルスクリプトの一般的なルールは、やむを得ない理由がない限り、変数を常に引用することです。あなたがおそらく知りたいと思うより多くの詳細については、この素晴らしいQ&Aを見てください:bash / POSIX shellsで変数を引用するのを忘れることのセキュリティの意味。 ただし、次のような関数を検討してください。 run_this(){ $@ } $@そこに引用されるべきかどうか?少し遊んでみましたが、引用符がないことが問題を引き起こすケースを見つけることができませんでした。一方、引用符を使用すると、引用符で囲まれた変数としてスペースを含むコマンドを渡すときに中断します。 #!/usr/bin/sh set -x run_this(){ $@ } run_that(){ "$@" } comm="ls -l" run_this "$comm" run_that "$comm" 上記のスクリプトを実行すると戻ります: $ a.sh + comm='ls -l' + run_this 'ls -l' + ls -l total 8 -rw-r--r-- 1 terdon users 0 Dec 22 12:58 da -rw-r--r-- 1 …

2
JavaScriptの「split()」のようなものがシェルにありますか?
split()JavaScriptで文字列を配列に分割するのは非常に簡単です。 シェルスクリプトはどうですか? 私はこれをやりたいと言います: $ script.sh var1_var2_var3 ユーザーがそのような文字列var1_var2_var3をscript.shに渡すと、スクリプト内で文字列を次のような配列に変換します array=( var1 var2 var3 ) for name in ${array[@]}; do # some code done

2
私のコマンドの最後でこれをどのように実行し、スクリプトを非常に高速にしましたか?
オンラインでいくつかのCTFの課題を解決しているときに、サーバーをブルートフォースする必要がある状況に遭遇しました。これは私が書いたコードです: #!/bin/bash for i in {0..9}{0..9}{0..9}{0..9} do echo "Now trying code.." echo $i echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt done これは、信じられないほど、非常に遅いものでした。1000〜9999の組み合わせを試す必要があり、10回の試行ごとに約5秒かかりました。次に、アドバイスに従って、この行の最後に「&」を付けます。 echo "a fixed string" $i | nc localhost *port here* >> /tmp/me/dump.txt & そして、数秒で数百の組み合わせを試しました。とても驚いた。誰かが私にロジックを説明できますか?「&」は何をしましたか?


1
マシンを再起動した後、スクリプトを続行する方法は?
私はbashでシェルスクリプトを書いています。スクリプトのある時点で、続行する前にマシンを再起動する必要があることを検出します。以下を発行します。 sudo reboot マシンが復旧すると、このスクリプトで必要な作業がさらにあります。このスクリプトで作業を続行するために何かを構成するにはどうすればよいですか? 次の再起動時に実行されるようにシェルスクリプトを記述できる場所があると想定しています。そのような場所はどこですか?cronには@rebootディレクティブがあります。また、Apacheなどのサービスは、起動時に起動時に起動されることも知っています。どちらかが適切なメカニズムでしょうか?もしそうなら、どのようにトリガーされますか? このスクリプトは、再起動のたびに実行されるのではなく、1回実行するだけで済みます。そのため、次の再起動時に実行される場所に移動するか、実行後に自身を削除する必要があります。 この質問では、再起動後にアプリケーションの状態を保存する方法について尋ねられます。私のスクリプトにはあまり状態がないので、それを管理できます。次回の再起動後にこのスクリプトで何かを実行させる方法を知る必要があるだけです。 私の特定のバージョンはUbuntu Linux 14.04です。元のスクリプトは、システム管理者がコマンドラインで起動します(cronから実行するのではありません)。

2
パイプを使用してbash関数を作成する方法は?
この方法で定義された関数はほとんどありません。 function f { read and process $1 ... echo $result } 呼び出しが次のようになるようにそれらを一緒に作りたいですf | g | h。 引数で機能する関数をstdinからの引数を読み取る1つに変換するために使用するイディオムのシャドーは何ですか?ペアをエスケープする必要なくストリームから引数のタプルを読み取ることは可能ですか?

2
シェル変数の展開とグロブの効果とその上での分割
この投稿には実際には2つの個別の質問が含まれていますが、それらをグループ化することで、より多くのコンテキストが得られると思います。私は変数の引用符についてこの質問をしましたが、そもそも変数の展開が何を意味するのかよくわかりません。だから私の最初の質問は: unix / linux speakの変数展開とは何ですか? 私の質問の2番目の部分は、次の用語に関連しています。 glob スプリット 上記は何を意味し、変数展開にどのように影響しますか?元の質問への回答には、次のことが記載されています。 (リストコンテキストで)引用符がないことは、split + glob演算子と考えてください。 echo $ testがecho glob(split( "$ test"))のように。 私は直接の概念取り組む任意の答えを見つけることができませんでしたグロブや分割をではなく、直接、このように他の質問に答えるには、それらの用語を使用しています最近のもの。


5
一致した行と一致した行からn番目の行を出力します
一致した行と一致した行の4番目の行(検索対象の式を含む行)を印刷しようとしています。 私は次のコードを使用しています: sed -n 's/^[ \t]*//; /img class=\"devil_icon/,4p' input.txt ただし、これは一致した行のみを出力します。 これは、4行目のみを印刷します。 awk 'c&&!--c;/img class=\"devil_icon/{c=4}' input.txt 一致した行と4行目のみを印刷する必要があります。

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