あなたが持っていたもの(二重引用符付きのバリアント)は正しいです。この構文では 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
、別の名前を選択しました ;-)