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

シェルは、Unixのコマンドラインインターフェイスです。シェルにインタラクティブにコマンドを入力するか、スクリプトを記述してタスクを自動化できます。/ bin / shおよび最も互換性のあるシェル(ash、bash、ksh、zshなど)に適用される質問には、このタグを使用します。エラーのあるシェルスクリプトについては、ここに投稿する前にhttp://shellcheck.netで確認してください。

3
バックグラウンドコマンドを待つシェルスクリプト
私はスクリプトを書いていますが、それを行う方法を見つけることができない何かが必要です... バックグラウンドでコマンド「command1&」を作成し、スクリプトのどこかでコマンドが終了するのを待ってからcommand2を実行する必要があります。基本的に、私はこれが必要です: 注:各コマンドは特定のディレクトリで実行されます!whileループの最後に、command1が4つのディレクトリを作成しました。それぞれが特定のプロセスを実行するため、実行中のプロセスの合計は4です。 a=1 while [$a -lt 4 ] . command1 #Generates 1 Process a= `export $a +1` done #Wait until the 4 process end and then run the command2 . command2 私はwaitpidプロセス番号を持つコマンドについて何かを見ましたが、それもうまくいきませんでした。

1
一部のシェルで「nohupコマンド>&/ dev / null」が「機能する」ように見えるのはなぜですか?
私はUbuntuに尋ねて、以下を提案していた答えを編集しました nohup gedit >& /dev/null & 彼らが実際に意味したとき nohup gedit &> /dev/null & 後者は、stderrとstdoutの両方をに正しくリダイレ​​クトし/dev/nullます。前者は、というファイルを作成する&か、他の場合と同じようにエラーを出す可能性が高いと予想していました。 $ echo "foo" >& bash: syntax error near unexpected token `newline' 代わりに、前者とまったく同じように機能するようで、geditウィンドウが表示され、エラーメッセージは出力されません。 また、これはシェル固有であることに注意する必要があります。 bash(4.2.45(1)-release)、zsh(5.0.2)、csh(deb package version:20110502-2)およびtcsh(6.18.01):上記のように機能し、エラーメッセージもファイルも作成されません。 dash (0.5.7-3): $ nohup gedit >& /dev/null & $ dash: 2: Syntax error: Bad fd number ksh(93u + 2012-08-01):失敗しますが、ウィンドウは表示され1223ませんが、プロセスは明らかに開始されます()gedit: $ nohup …

4
コピー中にファイルの名前を変更する方法は?
各ファイルの名前を変更して名前からランダムな文字列部分を削除しながら(つまり、-2b0fd460_1426b77b1ee_-7b8e)、バックアップディレクトリ内のすべてのファイルをユーザーのディレクトリにコピー(日付が変更されないアーカイブスタイル)するにはどうすればよいですか? cp from: /backup/path/data/Erp.2014.02.16_16.57.03-2b0fd460_1426b77b1ee_-7b8e.etf に: /home/user/data/Erp.2014.02.16_16.57.03.etf 各ファイルは常に「Erp」で始まります。日付時刻スタンプ文字列、ランダム文字列、拡張子「.etf」の順に続きます。日時スタンプを含むすべての名前要素を保持したい。ランダムな文字列を削除したいだけです。 ランダムな文字列により、同じファイルの複数のバックアップが可能になります。ただし、この場合、fdupesを実行しただけで、重複はありません。したがって、ランダムな文字列を削除して、すべてのファイルを単純に復元できます。 それを行う1行のbashコマンドを探しています。 それでもうまくいかない場合は、2つ以上の手順で実行できます。通常はKRenameを使用しますが、この場合はbashで行う必要があります。(リモートで作業しています。)
12 bash  shell  rename  file-copy 

3
2つの検索コマンドの比較
最近find、このワンライナーを受け取りましたが、以下の2つの違いがどこから来るのかを説明することはできません。 例1 [root@centos share]# find . -exec grep -i "madis" {} /dev/null \; ./names:Madison Randy:300:Product Development 例2 [root@centos share]# find . -exec grep -i "madis" {} \; Madison Randy:300:Product Development ご覧のとおり、最初のものには、この文字列が由来する特定のファイルがあり、これまでのところ、なぜこれが起こっているのかを知ることができません。
12 bash  shell  find 

3
bashは余分な単一引用符を追加します
スクリプトの実行に問題があります。 デバッグモード(bash -x)で実行すると、bashが余分な引用符を追加していることがわかります。そのため、私のスクリプトは失敗しています。 これは私のスクリプト内です: testvar="\"sudo /home/pi/shared/blink.sh 27 off\"" ssh -n -q -q -o BatchMode=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 $1 ${testvar} これは出力です: ssh -n -q -q -o BatchMode=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 192.168.42.105 '"sudo' /home/pi/shared/blink.sh 27 'off"'
12 shell  ssh  quoting 

4
プレフィックスまたはサフィックスを追加して、ローカルフォルダー内のファイルの名前を変更する
フォルダーに多くのファイルがあり、それらにプレフィックスまたはサフィックス(両方ではなく)を追加したい。ここで確認して、使用できることがわかりました for filename in *.jpg; do mv "$filename" "prefix_$filename"; done; で終わるすべてのファイルにプレフィックスを追加するには.jpg(およびを削除.jpgすると、現在のフォルダー内のすべてのファイルにプレフィックスが追加されます)。 しかし、私はできるようにしたい サフィックスを追加します(つまり、名前filename.extをに変更しますfilename.whatever.ext)。 プレフィックスまたはサフィックスが既に存在するかどうかを確認してからスキップし、 addprefix whatever *.extまたはなどの引数を受け入れるエイリアスを作成しますaddsufix whatever *.*

6
「$((〜33))」が-34を生成するのはなぜですか?
$ echo $(( 255 )) 255 $ echo $(( 33 )) 33 $ echo $(( ~33 )) -34 $ echo $(( ~255 )) -256 $ 私のカーネルは: $ uname -a Linux HOSTNAME 3.2.0-40-generic-pae #64-Ubuntu SMP Mon Mar 25 21:44:41 UTC 2013 i686 i686 i386 GNU/Linux 質問: ~数字を無視するためです。しかし、なぜない~33生産-34となぜ~255農産物は-256?
12 bash  shell  arithmetic 

8
端末で大文字と小文字が区別されるのはなぜですか?
私がそうするとき- それのCD ..代わりにcd ..私に言ってエラーを与える- CD: command not found Linuxコマンドに関して、ターミナルの大文字と小文字が区別されるのはなぜですか?つまり、「すべて大文字」または「すべて小文字」のいずれかの文字を使用してコマンドを実行できるはずです。 私はそれが何らかの理由によるものであることを知っていますが、私はただ興味があります。


2
リストからファイルをインタラクティブに削除する
ファイルのリストを削除して、確認を求められます。リストはlist.txtファイルにあります。次のコマンドが正しく機能しないのはなぜですか? while read i; do rm -i $i; done < list.txt 前のコマンドは私を待ちませんが、幸いなことにファイルは削除されません。 私はBashを使用しています。

4
cpを使用して単一のファイルを複数のディレクトリにコピーする
この質問は、以前の質問「を使用して多数のディレクトリを作成する」の続きmkdirです。 bashシェルを使用しています。次のコマンドを使用して、それぞれが接頭辞「s」で始まる50個のディレクトリを作成しました。 mkdir $(printf "s%02i " $(seq 1 50)) 2番目の桁にゼロが埋め込まれます。つまり、私が取得ディレクトリの形式はs01、s02、...、 、。s49s50 ここで、50個のディレクトリのそれぞれにcp単一のファイル(たとえば、test.txt)をコピーするために使用したいと思います。上記と同様の方法でこれを行うことは可能ですか?たとえば、次のように動作しますか?私はUnix / Linuxに比較的慣れていないので、誰かが私にそれが安全であるという指示を与えてくれるまで、私は本当にこれを試してみたいとは思いません。 cp test.txt $(printf "s%02i.txt" $(seq 1 50)) のmanページを見ると、次のcpようなcp複数の宛先をサポートしているようには見えませんが、 NAME cp - copy files and directories SYNOPSIS cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE... DESCRIPTION Copy SOURCE to DEST, or …
12 bash  shell  cp 


2
コマンドラインで正規表現のバックスラッシュをエスケープするために必要なバックスラッシュの数
私は最近、コマンドラインでいくつかの正規表現に問題があり、バックスラッシュを一致させるために、異なる数の文字を使用できることがわかりました。この数は、正規表現に使用される引用符(なし、単一引用符、二重引用符)に依存します。意味については、次のbashセッションを参照してください。 echo "#ab\\cd" > file grep -E ab\cd file grep -E ab\\cd file grep -E ab\\\cd file grep -E ab\\\\cd file #ab\cd grep -E ab\\\\\cd file #ab\cd grep -E ab\\\\\\cd file #ab\cd grep -E ab\\\\\\\cd file #ab\cd grep -E ab\\\\\\\\cd file grep -E "ab\cd" file grep -E "ab\\cd" file grep …

6
空のディレクトリツリーを削除する(できるだけ多くのディレクトリを削除するが、ファイルは削除しない)
次のようなディレクトリツリーがあるとします。 ROOTDIR └--SUBDIR1 └----SUBDIR2 └----SUBDIR3 私が入力したときのようなコマンドを探しています: $ [unknown command] ROOTDIR ファイルがなく、ツリー全体の内部にのみディレクトリがある場合、ディレクトリツリー全体を削除できます。ただし、SUBDIR1の下にhello.pdfというファイルがある場合は、次のようにします。 ROOTDIR └--SUBDIR1 └--hello.pdf └----SUBDIR2 └----SUBDIR3 次に、コマンドはSUBDIR2以下のみを削除する必要があります。
12 shell  directory  rm 


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