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

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

4
sedが終了していない「s」に関するエラーを表示するのはなぜですか?
bashスクリプトに一連のsed置換があり、終了していない「s」コマンドに関するエラーが発生します。sed行は次​​のようになります。 sed -n -e "s/TMPFOO1/$FOO1/" -e "s/TMPFOO2/$FOO2/" -e "s/TMPFOO3/$FOO3/" -e "s/TMPFOO4/$FOO4/" -e "s/TMPFOO5/$FOO5/" /home/foo/template > /home/foo/template/finishedresult しかし、何らかの理由で、bashはこれを好みません。 sed: -e expression #4, char 69: unterminated `s' command ここで何が欠けていますか?SEDに変数を入力させるにはどうすればよいですか?それらはすべて終了しているように見えます。

2
FreeBSD rcスクリプトを作成する簡単な方法はありますか?
次のコマンドを使用してサーバーを実行するFreeBSDの刑務所があります。 /usr/sbin/daemon /path/to/script.py 現時点では、マシンを再起動して刑務所が起動するたびにこのコマンドを実行する必要があります。このコマンドをから開始したいの/etc/rcですが。daemonコマンド用のFreeBSD rcスクリプトを作成する簡単な方法はありますか? 更新:私はrcスクリプトに関するこのBSDドキュメントを読み、そこから次のスクリプトを作成しました/etc/rc.d/pytivo: #!/bin/sh . /etc/rc.subr name=pytivo rcvar=pytivo_enable procname="/usr/local/pytivo/pyTivo.py" command="/usr/sbin/daemon -u jnet $procname" load_rc_config $name run_rc_command "$1" これは、刑務所が起動したときにデーモンとして必要なpythonスクリプトを開始するように機能します...(指定さpytivo_enable="YES"れて/etc/rc.confいる場合)起動しようとすると警告が表示されます。 [root@meryl /home/jnet]# /etc/rc.d/pytivo start [: /usr/sbin/daemon: unexpected operator Starting pytivo. [root@meryl /home/jnet]# ですから、近づいてきて動作しますが、これよりも優れた機能を手に入れることができるはずです。

4
bash(またはその他)で変数環境変数を設定する
スクリプトで、設定する環境変数のキーと値のペアを含むファイルを読み取ってから設定する必要があります。 これまでのところ、私はこれを持っています: #!/bin/bash cat $1 | while read kv do key=${kv%=*} val=`echo ${kv#*=} | sed 's/^"\|"$//g'` export $key="$val" done そして、私はこのようなファイルを読みたいです: XAUTHLOCALHOSTNAME="localhost" DISPLAY=":0" XAUTHORITY="/tmp/some-XAuthority" スクリプトの実行中はスコープでこれらの変数のみが必要なので、親スコープのスクリプトで変数を設定する問題を解決する必要はありません。 私のテストから、私の問題はexport $key="$val"にあると思うので、その行の交換が必要だと思います。

3
CPU温度の保護機能を有効にする方法
私のデスクトップは嫌な癖があります。いくつかの高輝度アプリケーションを実行していて、CPUが一定期間最大使用状態になると、コアの温度が上昇し、コンピューターが自動的にシャットダウンします。 CPU温度をバックグラウンドで監視(スクリプトを記述)して、一定の温度を超えたときに何らかの警告を表示する方法はありますか? 私はウィンドウマネージャーとしてdwmを使用してopensuseを実行しています。私は通常sensors、CPU温度を確認するために使用します。


6
毎月の名前のディレクトリを作成するにはどうすればよいですか?
毎月ディレクトリ名を作成したいと思います。シェルで遊んだ後、次のことがわかります。 date -d 1/01 +%b # Gives Jan date -d 2/01 +%b # Gives Feb . date -d 12/01 +%b # Gives Dec だから私はブレース展開を使用して、echo {1..12}/01それを試してみましxargsた: echo {1..12}/01 | xargs -n 1 -I {} date -d {} +%b しかし、それは惨めに失敗します:/(後で適用したいと思いますmkdir)。これどうやってするの?


1
$できます!並列実行されているスクリプトで使用すると競合状態が発生しますか?
次のようなコードで、並行して実行される複数のbashスクリプトがあるとします。 #!/bin/bash tail -f /dev/null & echo "pid is "$! そのスクリプトの$!最新のバックグラウンドタスクのPIDを取得することが保証されていますか、それともグローバルな最新のバックグラウンドタスクですか?この機能に依存すると、PIDが別のスクリプトで開始されたプロセスからのPIDである場合に競合状態が発生する可能性があるかどうか、私は興味があります。

4
Bash読み取り:カンマ区切りリストの読み取り、最後の要素が欠落しています
以下のコマンドの出力は私には奇妙です。なぜ要素5が返されないのですか? $ echo '0,1,2,3,4,5' | while read -d, i; do echo $i; done 0 1 2 3 4 「5」も返されると思います。実行していGNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)ます。コンマの追加は機能しますが、入力データにコンマがありません。何か不足していますか?

5
Bash配列でのパラメーター置換の使用
Bash配列に読み込む必要があるfile.txtがあります。次に、スペース、二重引用符、およびすべてのエントリの最初のカンマを除くすべてを削除する必要があります。これが私がどこまで得たかです: $ cat file.txt 10,this 2 0 , i s 30,"all" 40,I 50,n,e,e,d,2 60",s e,e" $ cat script.sh #!/bin/bash readarray -t ARRAY<$1 ARRAY=( "${ARRAY[@]// /}" ) ARRAY=( "${ARRAY[@]//\"/}" ) for ELEMENT in "${ARRAY[@]}";do echo "|ELEMENT|$ELEMENT|" done $ ./script.sh file.txt |ELEMENT|10,this| |ELEMENT|20,is| |ELEMENT|30,all| |ELEMENT|40,I| |ELEMENT|50,n,e,e,d,2| |ELEMENT|60,se,e| コンマの状況を除いて、それは素晴らしい働きをします。この猫のスキンを作成する方法は複数あることは承知していますが、これは一部のスクリプトが大きいため、ここに到達するにはパラメーター置換を使用したいと思います。 |ELEMENT|10,this| |ELEMENT|20,is| |ELEMENT|30,all| |ELEMENT|40,I| …

6
複数のディレクトリの存在を確認する
作業ディレクトリに複数のディレクトリ、たとえばdir1、dir2およびが存在するかどうかを確認したいと思いdir3ます。 私は以下を持っています if [ -d "$PWD/dir1" ] && [ -d "$PWD/dir2" ] && [ -d "$PWD/dir3" ]; then echo True else echo False fi しかし、もっとエレガントな方法があるのではないかと思います。ディレクトリの名前にパターンがあると仮定しないでください。 目標は、いくつかのディレクトリの存在と他のディレクトリの非存在を確認することです。 私はBashを使用していますが、移植可能なコードが推奨されます。

2
複数のテキストソースの最初の行から配列を作成するにはどうすればよいですか?
それぞれ数行のテキストを持つファイルへのパスの配列があります。次のように処理された各ファイルの最初の行が入力された配列を作成したいと思います。 # this.txt first line is [Test this] # another.txt first line is [Test another] paths=( ./this/path/this.txt ./another/path/another.txt ) for i in ${paths[@]}; do read -r line < $i lines+=$line done せいぜい、配列で取得した値は1つだけです。forループから探している配列を取得できないようです。私は多くのバリエーションを試しましたが、どこが間違っているのかを理解するのに苦労しました。

2
Bashスクリプトのこの「find」コマンドに混乱しましたか?
私は、意味を説明できなくなった誰かが作成したbashスクリプトを持っています。これは、フォルダーの自動TAR処理とバックアップに使用されます。現時点で私は最後の行で混乱しています: find '/home/_backups/pokebrawl' -mtime +6 -type f -delete 完全なスクリプトは次のとおりです。 #!/bin/bash #Purpose = Backup of Important Data #Created on 17-1-2012 #Author = Hafiz Haider #Version 1.0 #START TIME=$(date +"%m-%d-%Y-%T") FILENAME=pokebrawl-$TIME.tar.gz SRCDIR=/home/servers/brawl/world DESDIR=/home/_backups/pokebrawl tar -cpzf $DESDIR/$FILENAME $SRCDIR find '/home/_backups/pokebrawl' -mtime +6 -type f -delete #END

2
DebianまたはUbuntuにパッケージをインストールする前に、複数の依存関係が存在するかどうかを確認します
次のコマンドを実行することで、パッケージをDebianまたはUbuntuにインストールするために必要な複数の依存関係がリポジトリに存在するかどうかを確認できることはすでに知っています。 apt policy first-package second-package ... last-package このコマンドは、各パッケージが現在インストールされているかどうかも通知します。 私の質問は、現在インストールしていないサポート対象バージョンのDebianまたはUbuntuに複数の依存パッケージが存在するかどうかをすばやく確認する方法です。そのOSが現在インストールされていないため、依存関係パッケージがローカルとオフラインに存在するかどうかを確認できませんが、必要な依存関係パッケージが端末からデフォルトのリポジトリに存在するかどうかを確認したいと思います。 この情報の用途の1つは、Ubuntuにインストールされているアプリケーションが最新バージョンのUbuntuにもインストールできるかどうかを確認してから、最新バージョンのUbuntuをインストールするか、既存のOSを最新バージョンにアップグレードすることです。

2
tbzファイルへのファイルの追加
何千もの.tbzアーカイブファイルを更新する方法を探しているので、これをシェルスクリプトで実行します。それぞれに1つのファイルを追加する必要があります。 私の質問は、各tbzの内容を抽出せずに、含まれているtarに含まれている新しいファイルで再圧縮することなく、これを行うより速い方法はありますか?コマンドはどのように見えますか? ありがとう

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