あなたが持っていたもの(二重引用符付きのバリアント)は正しいです。この構文では bash と sh が完全に重複するため、に変更して/bin/bashもこの問題は解決されません。
#!/bin/sh
touch "$1"
確認/試行するいくつかのこと:
- で実行権限をオンにしていることを確認してください
chmod +x config
- スクリプトを配置する場所に応じて、ディレクトリ内にいるかのように実行するか
./config hello.iso、それ以外の場合は完全なパス名を使用してください (例のみ) 。/home/your-username/bin/config hello.iso
set -xスクリプトの行の上にa を追加してtouch "$1"、デバッグ トレースを確認してください。
- 一部のシェル実装 (特に 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、別の名前を選択しました ;-)