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

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

3
複数のファイルに対するImageMagick
convert以下のコマンドを使用して、ImageMagickで単一のファイルをBMPからPNGに変換しました convert CD\ Front.bmp CD\ Front.png 私はそのようなファイルをたくさん持っているので、試してみました: for f in */*.bmp ; do convert $f ${f%bmp}png; done しかし、このコマンドは永久にハングします。 何が悪いのですか?

3
シェル全体のバックスラッシュの処理
どのようにechoしてprintf御馳走バックスラッシュでzsh、bashおよび他のシェル? 下ではzshの私は、次の動作を取得します: $ echo "foo\bar\baz" foaaz $ echo "foo\\bar\\baz" foaaz $ echo 'foo\bar\baz' foaaz $ echo 'foo\\bar\\baz' foo\bar\baz 下ではbashの、物事はもう少し一貫性のあるように見えます。 bash$ echo "foo\bar\baz" foo\bar\baz bash$ echo 'foo\bar\baz' foo\bar\baz bash$ しかし、もっと具体的に:どのように私は、次のようなバックスラッシュを含む文字列渡すことができ\\foo\bar\somethingました: echo printf print まったく同じ文字列を取得しますか?(zshとbash)? 次に、zshの関数の別の実験を示します。 function foo { echo -E '$1' } $ foo \\here\is\some\path $1 どうすれば印刷するだけ\\here\is\some\pathですか? 更新(注:これは現在、Stephaneのコメントで回答されています) 私はzsh 5.0.2で以下を試しました: function …
9 bash  shell  zsh  quoting 

3
別のシェル(ターミナルウィンドウまたはタブ)で開始されたジョブを強制終了するにはどうすればよいですか?
プロセスを開始し、ターミナルウィンドウでそれをバックグラウンド化する場合(たとえばping google.com &)、それを使用kill %1してプロセスを強制終了できます(ジョブ1と想定)。 ただし、別のターミナルウィンドウ(またはタブ)を開くと、バックグラウンドプロセスはリストに表示されjobsず、を使用して直接終了することはできませんkill。 別のターミナルウィンドウまたはタブからこのプロセスを強制終了することはできますか? 注:私はXfceターミナルエミュレータ0.4.3とbashを使用しています(ただし、ソリューションが別の一般的なシェルに存在するがbashではない場合は、それにオープンしています)

3
コマンド出力を改行で分割しますか?
複数の行を返すコマンドがあります。さらに処理するために、これらの行の各単一行を処理する必要があります。 私の現在のコードはIFS(内部フィールド区切り文字)を変更することで機能します。 ROWS=$(some command returning multiple lines) O=$IFS #save original IFS IFS=$(echo -en "\n\b") # set IFS to linebreak for ROW in ${ROWS[@]} do echo "$ROW" done IFS=$O #restore old IFS IFSを変更せずに、複数行出力の単一行にアクセスするより良い方法はありますか?特に、IFSを変更すると、スクリプトの読みやすさが低下します。 更新:チョロバからのものなど、回答を機能させるのに問題があります。 while IFS= read -r line ; do let var+=line #line 42 done << $(sqlite3 -list -nullvalue NULL …

2
インタラクティブSSHを使用してリモートホストでコマンドを実行する(条件付き)
リモートホストにログインするたびに、現在のインタラクティブなSSHセッション内でコマンドを自動的に実行できるようにしたいと思います。 何かのようなもの ssh user@remotehost [run do.sh] ここでdo.shは、いくつかのハウスキーピングタスクを実行してから、screenセッションに再接続します(現在do.sh、ホストにログインした後、手動で実行しています)。 .bashrc他のマシンからこのホストにdo.shログインし、そこからログインするときに実行したくないので、追加したくないので、オプションにする必要があります。


2
シェル(bashなど)はワイルドカードパターンをどのように展開しますか?
ディレクトリに、文字「a」で始まる100個のファイルがあると仮定します。 grep <some string> a*端末から行う場合、シェルはこれをどのように処理しますか? それは正規表現を拡張し、aで始まるすべてのファイルのリストを取得し、それらのファイルのそれぞれで順次grepを取得しますか?それとも他の方法がありますか? 上記のファイル名の配列が「a」で始まると仮定します。forループを記述し、シェルスクリプトまたはacプログラムで自分で反復を実行すると、時間がかかりますか?
9 bash  shell  wildcards 

3
「mkdir foo; svn mv * foo」
私はよくこのイディオムのいくつかの変形をしたいです: $ mkdir 2010 $ svn mv * 2010 もちろん、グロブも2010と一致するため、エラーが発生します。 svn: Cannot copy path '2010' into its own child '2010/2010' "svn mv * 2010"正しいことをする別のワンライナーに置き換える方法はありますか?

7
ファイル拡張子をクリーンアップする方法は?
拡張子を.mp3に変更したい.MP3ファイルを含むディレクトリがあります。これを行う最も簡単な方法は何ですか?私は次のように考えています: find /RootPath -type f -iname "*.mp3" -exec mv {} sed s/.*MP3/\1.mp3/ \; ...私はそれが正しくないことを知っていますが。:)置換は正しくなくmv、a sedと-execinでコマンドの両方を使用する方法がわかりませんfind。 これにはbashスクリプトが必要ですか?
9 shell  find  rename 

1
一時ファイルによるbashプロセスの置換
たとえば、一部のプログラムでは、ファイルをシーク可能にする必要がありますobjdump。 $ objdump -D -b binary -m i8086 <(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p) objdump: Warning: '/proc/self/fd/11' is not an ordinary file プロセス置換で一時ファイルを使用すると便利です。 manページで、bashがプロセス置換を使用して一時ファイルにフォールバックできることを確認できますが、一時ファイルを使用するように明示的に要求できますか? 同様zshの=()。 $ objdump -D -b binary -m i8086 =(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p) /tmp/zsh1u1Nrw: file format binary Disassembly of section .data: …

7
引用符付きのbash awkコマンド
私はしばらくの間、この質問に対する答えを見つけようと努めてきました。awkからの出力に基づいてコマンドを実行する簡単なスクリプトを書いています。 ID_minimum=1000 for f in /etc/passwd; do awk -F: -vID=$ID_minimum '$3>=1000 && $1!="nfsnobody" { print "xfs_quota -x -c 'limit bsoft=5g bhard=6g $1' /home "}' $f; done 問題は、-c引数が単一引用符で囲まれたコマンドを取り、それを適切にエスケープする方法を理解できず$1、ユーザー名に展開されないことです。 基本的に私はそれを出力させようとしているだけです: xfs_quota -x -c 'limit bsoft=5g bhard=6g userone' /home xfs_quota -x -c 'limit bsoft=5g bhard=6g usertwo' /home 等...
8 bash  shell  scripting 

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

2
POSIXシェルで文字を繰り返す方法に関する説明が必要
スタックオーバーフローに関する次の回答、 bashで文字を繰り返すにはどうすればよいですか? 次のように、POSIXの 1つのもっともらしい方法を課します-1つの文字を繰り返します。この例では、等号を100回使用します。 printf %100s | tr " " "=" 私の問題は、それがどのように機能するのか理解していないことです。マニュアルを読むなどのコメントはご遠慮ください、私はそうしました。私はそれを賢くはないので、私はこれまで使用したことがなくtr、そのようなprintfステートメントを見たことがないので、この質問をします。
8 shell  posix  printf  tr 


6
sh再帰コピー(cp -r)-サブフォルダーを除外する方法
(net / ssh)を使用しsshてリモートスクリプトを実行し、フォルダーを再帰的にコピーしてサブフォルダーを除外する必要があります。私はそれを行う最速の方法を探しているので、良くありません。また、ではなくを使用していることも理解しています。Rubyrsyncsshshbash バッシュで私はします: cp -r srcdir/!(subdir) dstdir そしてそれはうまくいきます。しかし、スクリプトを起動sshするとエラーが表示されます sh: 1: Syntax error: "(" unexpected 使っているからsh。 shmanページを確認しましたが、ファイルを除外するオプションはありません。 それは正しいssh使用の私の仮定shですか?代替案はありますか? 編集1: それが便利な場合、の出力sudo cat /etc/shellsは次のとおりです: # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash /usr/bin/tmux /usr/bin/screen 編集2: OK。したがって、bashは利用可能であり、それは問題ではないようです。sshが実際に使用していることを確認しましたbash。この問題は、括弧または感嘆符のエスケープに関連しているようです。私はシェル(macos)からコマンドを実行しようとしましたが、これが実際のコマンドです。 ssh -i .ssh/key.pem ubuntu@X.X.X.X 'mkdir /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; cp -r /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/!\(constant\) /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N; ln -s /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/mesh/constant /home/ubuntu/OpenFOAM/ubuntu-4.1/run/LES_New-Area_residuals2/N/constant' このようにして、別のエラーを受け取ります …
8 shell  ssh  cp 

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