0

qemu-launcher(私が試した4つのうち唯一のqemu GUI)の構成ファイルをワンステッププロセスで作成するシェルスクリプトを作成しようとしていますが、コマンドラインを渡す方法がわかりません"touch" コマンドの引数。

私のコンソール入力はconfig hello.iso.

これまでの私のスクリプトは次のとおりです。

#!/bin/sh

touch $1

ファイルを作成しません。に等しい変数を作成して$1から使用しようとしましたが、まだ応答がありません。$1二重引用符と単一引用符の両方で試しました。double では何も得られず、single では結果のファイル名は1.

ただし、単に の引数を渡すhelloと、その名前のファイルが作成されますが、他のもので使用するには拡張子が必要です。

これを行うことはできませんか?それとも私が理解していないだけですか?

私が本当にやりたいことは、引数を取り、.isoそこから を削除し、それをファイル名として使用することですが、grep の正の先読みを使用してそれを行うことができると確信しています。

4

2 に答える 2

0

sh の代わりに bash を使用する場合:

#! /bin/bash

myVar=$1
touch ${myVar%.iso}

仕事をします。「%」に続く文字列は、変数の内容の最後から削除されます。スクリプトの現在のバージョンで詳細情報を取得するには、次のことを試してください。

  • スクリプトの名前を変更します - 「config」は使用しないでください
  • 「タッチ」を「エコー」で変更する
  • スクリプトの出力をファイルにリダイレクトします
  • 出力の内容を見てください

    od -a myOutputOfTheScript

または ... でスクリプトを呼び出します

bash -x myScript hello.iso > ouput.txt

于 2013-07-25T06:28:23.537 に答える
0

あなたが持っていたもの(二重引用符付きのバリアント)は正しいです。この構文では bash と sh が完全に重複するため、に変更して/bin/bashもこの問題は解決されません。

#!/bin/sh

touch "$1"

確認/試行するいくつかのこと:

  1. で実行権限をオンにしていることを確認してくださいchmod +x config
  2. スクリプトを配置する場所に応じて、ディレクトリ内にいるかのように実行するか./config hello.iso、それ以外の場合は完全なパス名を使用してください (例のみ) 。/home/your-username/bin/config hello.iso
  3. set -xスクリプトの行の上にa を追加してtouch "$1"、デバッグ トレースを確認してください。
  4. 一部のシェル実装 (特に csh) では、末尾に改行がない場合、スクリプトの最後の行がスキップされます。私は通常、のようなコメントを追加するだけ#---eofです。これは、最新のほとんどのシェルで問題になることはほとんどありません。

configパスに既に呼び出されているシステム コマンドがある場合があります。実行type configして確認します。この種の衝突の可能性を下げるために、スクリプトにはより具体的な名前を付けることをお勧めします。

動作するスクリプト (おそらくより適切な名前) がある場合は、通常、それをbinホーム ディレクトリの名前の付いたディレクトリに配置し、そのディレクトリの名前がPATH環境変数に含まれていることを確認します。env不足しているディレクトリを PATH に追加する方法は、シェルと好みによって異なります~/.bashrc(技術的に制限されていますが) で確認~/.bash_loginしてください。これらすべてで、ホームディレクトリを指します。~/.bash_profile~/.profile~

典型的なパス:

$ env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

スクリプターが一般的に好むもの (scripterここで名前を挙げたものを想定):

$ env | grep PATH
PATH=/home/scripter/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

このユーザーはあなたのconfigスクリプトを入れたはずですが/home/scripter/bin/config、別の名前を選択しました ;-)

于 2013-07-25T07:36:14.657 に答える